parseJwt.ts
623 bytes
| 1 | export function parseJwt(token: string): Record<string, unknown> | null { |
|---|---|
| 2 | try { |
| 3 | const payload = token.split('.')[1] |
| 4 | if (!payload) return null |
| 5 | const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/')) |
| 6 | return JSON.parse(json) |
| 7 | } catch { |
| 8 | return null |
| 9 | } |
| 10 | } |
| 11 | |
| 12 | export function getUserIdFromJwt(token: string): string | null { |
| 13 | const claims = parseJwt(token) |
| 14 | if (!claims) return null |
| 15 | // ASP.NET Core uses this claim URI for NameIdentifier |
| 16 | return ( |
| 17 | (claims['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'] as string) ?? |
| 18 | (claims['sub'] as string) ?? |
| 19 | null |
| 20 | ) |
| 21 | } |
| 22 | |