@svadmin/sso 0.8.5 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/auth-provider.ts +16 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@svadmin/sso",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "OIDC/OAuth2 SSO AuthProvider plugin for svadmin — supports Okta, Azure AD, Cognito, Keycloak, Google",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"src"
|
|
32
32
|
],
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@svadmin/core": "^0.
|
|
34
|
+
"@svadmin/core": "^0.22.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"typescript": "^5.7.0"
|
package/src/auth-provider.ts
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
* ```ts
|
|
17
17
|
* import { createSSOAuthProvider } from '@svadmin/sso';
|
|
18
18
|
* import { setAuthProvider } from '@svadmin/core';
|
|
19
|
+
|
|
20
|
+
|
|
19
21
|
*
|
|
20
22
|
* const authProvider = createSSOAuthProvider({
|
|
21
23
|
* issuer: 'https://your-tenant.okta.com',
|
|
@@ -29,6 +31,19 @@
|
|
|
29
31
|
|
|
30
32
|
import type { AuthProvider, Identity } from '@svadmin/core';
|
|
31
33
|
|
|
34
|
+
// Safe base64url decode for JWT payloads
|
|
35
|
+
function decodeJwtPayload(token: string): any {
|
|
36
|
+
if (!token) return null;
|
|
37
|
+
const parts = token.split('.');
|
|
38
|
+
if (parts.length < 2) return null;
|
|
39
|
+
const payloadStr = parts[1];
|
|
40
|
+
const padded = payloadStr + '='.repeat((4 - (payloadStr.length % 4)) % 4);
|
|
41
|
+
const binString = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));
|
|
42
|
+
const bytes = Uint8Array.from(binString, (m) => m.codePointAt(0)!);
|
|
43
|
+
return JSON.parse(new TextDecoder().decode(bytes));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
32
47
|
// ─── Types ────────────────────────────────────────────────────
|
|
33
48
|
|
|
34
49
|
export interface SSOConfig {
|
|
@@ -393,7 +408,7 @@ export function createSSOAuthProvider(config: SSOConfig): AuthProvider {
|
|
|
393
408
|
// Try to extract roles/permissions from the ID token
|
|
394
409
|
if (tokens.id_token) {
|
|
395
410
|
try {
|
|
396
|
-
const payload =
|
|
411
|
+
const payload = decodeJwtPayload(tokens.id_token);
|
|
397
412
|
return payload.roles ?? payload.groups ?? payload.permissions ?? null;
|
|
398
413
|
} catch {
|
|
399
414
|
return null;
|