Begära anpassade anspråk med MSAL för iOS och macOS

Med OpenID Connect kan du begära att enskilda anspråk returneras från UserInfo-slutpunkten och/eller i ID-token. En anspråksbegäran representeras som ett JSON-objekt som innehåller en lista över begärda anspråk. Mer information finns i OpenID Connect Core 1.0 .

Med Microsofts autentiseringsbibliotek (MSAL) för iOS och macOS kan du begära specifika anspråk i både interaktiva och tysta tokenanskaffningsscenarier. Det gör det via parametern claimsRequest .

Det finns flera scenarier där detta behövs. Ett exempel:

  • Begära anspråk utanför standarduppsättningen för ditt program.
  • Begära specifika kombinationer av standardanspråk som inte kan anges med hjälp av omfång för ditt program. Om en åtkomsttoken till exempel avvisas på grund av saknade anspråk kan programmet begära de saknade anspråken med hjälp av MSAL.

Note

MSAL kringgår cacheminnet för åtkomsttoken när en anspråksbegäran anges. Det är viktigt att bara ange claimsRequest parametern när ytterligare anspråk behövs (i stället för att alltid tillhandahålla samma claimsRequest parameter i varje MSAL API-anrop).

claimsRequest kan anges i MSALSilentTokenParameters och 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 kan konstrueras från en NSString-representation av JSON-anspråksbegäran.

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)

Den kan också ändras genom att begära ytterligare specifika anspråk:

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 ska sedan anges i tokenparametrarna och anges till något av API:erna för MSAL-tokenförvärv:

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            ...