Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
OpenID Connect consente di richiedere facoltativamente la restituzione di singole attestazioni dall'endpoint UserInfo e/o nel token ID. Una richiesta di attestazioni è rappresentata come un oggetto JSON che contiene un elenco di attestazioni richieste. Per altri dettagli, vedere OpenID Connect Core 1.0 .
Il Libreria di Autenticazione Microsoft (MSAL) per iOS e macOS consente di richiedere attestazioni specifiche in scenari di acquisizione di token interattivi e invisibile all'utente. Esegue questa operazione tramite il claimsRequest parametro .
Esistono più scenari in cui è necessario. Per esempio:
- Richiedere dichiarazioni al di fuori dell'insieme standard per la tua applicazione.
- Richiedere combinazioni specifiche delle dichiarazioni standard che non possono essere specificate tramite gli ambiti per la propria applicazione. Ad esempio, se un token di accesso viene rifiutato a causa di attestazioni mancanti, l'applicazione può richiedere le attestazioni mancanti usando MSAL.
Note
MSAL ignora la cache dei token di accesso ogni volta che viene specificata una richiesta di attestazioni. È importante specificare claimsRequest il parametro solo quando sono necessarie attestazioni aggiuntive, anziché fornire sempre lo stesso claimsRequest parametro in ogni chiamata API MSAL.
claimsRequest può essere specificato in MSALSilentTokenParameters e MSALInteractiveTokenParameters:
/*!
MSALTokenParameters is the base abstract class for all types of token parameters (silent and interactive).
*/
@interface MSALTokenParameters : NSObject
/*!
The claims parameter that needs to be sent to authorization or token endpoint.
If claims parameter is passed in silent flow, access token will be skipped and refresh token will be tried.
*/
@property (nonatomic, nullable) MSALClaimsRequest *claimsRequest;
@end
MSALClaimsRequest può essere costruito da una rappresentazione NSString della richiesta di attestazioni JSON.
Objective-C:
NSError *claimsError = nil;
MSALClaimsRequest *request = [[MSALClaimsRequest alloc] initWithJsonString:@"{\"id_token\":{\"auth_time\":{\"essential\":true},\"acr\":{\"values\":[\"urn:mace:incommon:iap:silver\"]}}}" error:&claimsError];
Swift:
var requestError: NSError? = nil
let request = MSALClaimsRequest(jsonString: "{\"id_token\":{\"auth_time\":{\"essential\":true},\"acr\":{\"values\":[\"urn:mace:incommon:iap:silver\"]}}}",
error: &requestError)
Può anche essere modificato richiedendo attestazioni specifiche aggiuntive:
Objective-C:
MSALIndividualClaimRequest *individualClaimRequest = [[MSALIndividualClaimRequest alloc] initWithName:@"custom_claim"];
individualClaimRequest.additionalInfo = [MSALIndividualClaimRequestAdditionalInfo new];
individualClaimRequest.additionalInfo.essential = @1;
individualClaimRequest.additionalInfo.value = @"myvalue";
[request requestClaim:individualClaimRequest forTarget:MSALClaimsRequestTargetIdToken error:&claimsError];
Swift:
let individualClaimRequest = MSALIndividualClaimRequest(name: "custom-claim")
let additionalInfo = MSALIndividualClaimRequestAdditionalInfo()
additionalInfo.essential = 1
additionalInfo.value = "myvalue"
individualClaimRequest.additionalInfo = additionalInfo
do {
try request.requestClaim(individualClaimRequest, for: .idToken)
} catch let error as NSError {
// handle error here
}
MSALClaimsRequest deve quindi essere impostato nei parametri del token e fornito a una delle API di acquisizione di token MSAL:
Objective-C:
MSALPublicClientApplication *application = ...;
MSALWebviewParameters *webParameters = ...;
MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"user.read"]
webviewParameters:webParameters];
parameters.claimsRequest = request;
[application acquireTokenWithParameters:parameters completionBlock:completionBlock];
Swift:
let application: MSALPublicClientApplication!
let webParameters: MSALWebviewParameters!
let parameters = MSALInteractiveTokenParameters(scopes: ["user.read"], webviewParameters: webParameters)
parameters.claimsRequest = request
application.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in ...