Eigene Claim Resolver
Erweiterungen können neben Eigenen Login Providern auch eigene Claim Resolver registrieren. Standardmäßig werden einem Token nur Claims hinzugefügt,
welche beim Provider angefragt und akzeptiert wurden. Mit eigenen Claim Resolvern kann Nutzern anhand von Daten wie ihrer ID, ihren Claims und ihren Gruppen eine beliebige Anzahl an selbst definierten Claims hinzugefügt werden.
Es kann pro Authority von allen Extensions nur ein Claim Resolver registriert werden. Ist dieser Claim Resolver einmal registriert, wird er auf alle ausgestellten Tokens angewendet.
authority.configureExternalClaimResolver('upeResolver', (args: ExternalClaimResolverArgs) => {
return {
claims: {
...args.userClaims,
working: true,
},
};
};);Die Methode configureExternalClaimResolver erwartet als ersten Parameter den Namen des External Claim Resolvers und als zweiten Parameter eine Funktion, die den Claim Resolver implementiert. Die implementierende Resolver- Funktion erhält einen Parameter args mit folgenden Eigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
sub | Die ID des Benutzers, für den das Token ausgestellt wird |
token | Das Token, welches bisher generiert wurde |
use | Der Use Case des Tokens, entweder id_token. access_token oder userinfo |
scopes | Die Scopes, welche vom Client angefragt und vom Benutzer genehmigt wurden |
userClaims | Die bisher ausgestellten Claims |
userRoles | Eine Liste an Rollen oder Gruppen, welchen der Nutzer angehört |
Vom Claim Resolver wird ein Rückgabetyp mit der folgenden Struktur erwartet:
type ResolvedClaims = {
claims: AccountClaims;
}
type AccountClaims = {
sub: string;
[key: string]: any;
}Den Account Claims wird also die ID des Nutzers, sowie eine beliebige Anzahl anderer Claims in Form von Key-Value Paaren mitgegeben. Die vom Claim Resolver gelieferten Claims werden dann dem Token hinzugefügt.
In diesem Beispiel implementiert eine Extension einen simplen Claim Resolver, welcher den vorhandenen Claims einen weiteren claim ‘example_claim’ mit dem Wert true hinzufügt:
import {
AuthorityBackendSdk,
BackendExtensionModuleExport,
ExternalClaimResolver,
ExternalClaimResolverArgs,
} from '@5minds/processcube_authority_sdk';
const claimResolverExport: BackendExtensionModuleExport = {
onLoad: async (authority: AuthorityBackendSdk, config: {}}): Promise<void> => {
const resolveClaims: ExternalClaimResolver = async (args: ExternalClaimResolverArgs) => {
return {
claims: {
// sub wird hier über den spread aus den userClaims mitgegeben
...args.userClaims,
exampleClaim1: true,
exampleClaim2: true,
},
};
};
authority.configureExternalClaimResolver('exampleClaimResolver', resolveClaims);
},
};
export default claimResolverExport;