Definiera en teknisk OAuth2-profil i en anpassad Azure Active Directory B2C-princip

Anteckning

I Azure Active Directory B2C är anpassade principer främst utformade för att hantera komplexa scenarier. I de flesta scenarier rekommenderar vi att du använder inbyggda användarflöden. Om du inte har gjort det kan du läsa mer om startpaketet för anpassad princip i Kom igång med anpassade principer i Active Directory B2C.

Azure Active Directory B2C (Azure AD B2C) ger stöd för OAuth2-protokollidentitetsprovidern. OAuth2 är det primära protokollet för auktorisering och delegerad autentisering. Mer information finns i RFC 6749 Auktoriseringsramverket för OAuth 2.0. Med en teknisk OAuth2-profil kan du federera med en OAuth2-baserad identitetsprovider, till exempel Facebook. Om du federerar med en identitetsprovider kan användarna logga in med sina befintliga sociala identiteter eller företagsidentiteter.

Protokoll

Attributet Name för protocol-elementet måste anges till .OAuth2 Protokollet för den tekniska profilen Facebook-OAUTH är OAuth2till exempel :

<TechnicalProfile Id="Facebook-OAUTH">
  <DisplayName>Facebook</DisplayName>
  <Protocol Name="OAuth2" />
  ...

Indataanspråk

Elementen InputClaims och InputClaimsTransformations krävs inte. Men du kanske vill skicka fler parametrar till din identitetsprovider. I följande exempel läggs parametern domain_hint frågesträng till med värdet contoso.com för i auktoriseringsbegäran.

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

Utdataanspråk

Elementet OutputClaims innehåller en lista över anspråk som returneras av OAuth2-identitetsprovidern. Du kan behöva mappa namnet på anspråket som definierats i principen till namnet som definierats i identitetsprovidern. Du kan också inkludera anspråk som inte returneras av identitetsprovidern så länge du anger DefaultValue attributet.

Elementet OutputClaimsTransformations kan innehålla en samling OutputClaimsTransformation-element som används för att ändra utdataanspråken eller generera nya.

I följande exempel visas de anspråk som returneras av Facebook-identitetsprovidern:

  • Det first_name anspråket mappas till givenName-anspråket.
  • Det last_name anspråket mappas till efternamnsanspråket.
  • DisplayName-anspråket utan namnmappning.
  • E-postanspråket utan namnmappning.

Den tekniska profilen returnerar även anspråk som inte returneras av identitetsprovidern:

  • IdentityProvider-anspråket som innehåller namnet på identitetsprovidern.
  • AuthenticationSource-anspråket med standardvärdet socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

Auktoriseringsslutpunktsmetadata

Auktoriseringsflödet börjar när Azure AD B2C dirigerar användaren till slutpunkten för OAuth2-identitetsprovidrar/authorize. Anropet till auktoriseringsslutpunkten är den interaktiva delen av flödet, där användaren vidtar åtgärder. Nu uppmanas användaren att slutföra inloggningen på OAuth2-identitetsprovidern. Till exempel genom att ange användarnamn och lösenord.

Azure AD B2C skapar en auktoriseringsbegäran genom att ange klient-ID, omfång, omdirigerings-URI och andra parametrar som krävs för att hämta en åtkomsttoken från identitetsprovidern. I det här avsnittet beskrivs auktoriseringsslutpunktsmetadata, vilket gör det möjligt att konfigurera begäran till /authorize identitetsproviderns slutpunkt.

Begäran till auktoriseringsslutpunkten är alltid HTTP GET. Följande exempel visar ett anrop till auktoriseringsslutpunkten.

GET https://login.contoso.com/oauth/v2/authorization?
client_id=12345
&response_type=code
&response_mode=query
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&scope=profile%20offline_access
&redirect_uri=https%3a%2f%2fabrikam.b2clogin.com%2fabrikam.onmicrosoft.com%2foauth2%2fauthresp
&state=...

I följande tabell visas auktoriseringsslutpunktsmetadata.

Attribut Krävs Beskrivning
authorization_endpoint Ja URL:en för auktoriseringsslutpunkten enligt RFC 6749.
client_id Yes Programidentifieraren för identitetsprovidern.
AdditionalRequestQueryParameters No Frågeparametrar för extra begäran. Du kanske till exempel vill skicka extra parametrar till din identitetsprovider. Du kan inkludera flera parametrar med kommaavgränsare.
response_mode No Den metod som identitetsprovidern använder för att skicka tillbaka resultatet till Azure AD B2C. Möjliga värden: query, form_post (standard) eller fragment.
scope No Omfånget för den begäran som definieras enligt specifikationen för OAuth2-identitetsprovidern. Till exempel openid, profileoch email.
UsePolicyInRedirectUri No Anger om du vill använda en princip när du skapar omdirigerings-URI:n. När du konfigurerar ditt program i identitetsprovidern måste du ange omdirigerings-URI:n. Omdirigerings-URI:n pekar på Azure AD B2C, https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Om du anger truemåste du lägga till en omdirigerings-URI för varje princip som du använder. Exempel: https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp.

Metadata för tokenslutpunkt

När användaren har slutfört sin autentisering vid identitetsproviderns auktoriseringsslutpunkt returneras ett svar som innehåller auktoriseringen code till Azure AD B2C. Azure AD B2C löser in auktoriseringskoden för en åtkomsttoken genom att skicka en POST-begäran till /token identitetsproviderns slutpunkt. I det här avsnittet beskrivs metadata för tokenslutpunkten, vilket gör det möjligt att konfigurera begäran till /token identitetsproviderns slutpunkt.

Följande HTTP-begäran visar ett Azure AD B2C-anrop till identitetsproviderns tokenslutpunkt.

POST https://contoso/oauth2/token 
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=12345&scope=profile offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... 

I följande tabell visas metadata för tokenslutpunkten.

Attribut Krävs Beskrivning
AccessTokenEndpoint Ja URL:en för tokenslutpunkten. Till exempel https://www.linkedin.com/oauth/v2/accessToken.
HttpBinding No Den förväntade HTTP-bindningen till tokenslutpunkten. Möjliga värden: GET eller POST.
AccessTokenResponseFormat No Formatet för slutpunktsanropet för åtkomsttoken. Facebook kräver till exempel en HTTP GET-metod, men svaret för åtkomsttoken är i JSON-format. Möjliga värden: Default, Jsonoch JsonP.
ExtraParamsInAccessTokenEndpointResponse No Innehåller de extra parametrar som kan returneras i svaret från AccessTokenEndpoint av vissa identitetsprovidrar. Svaret från AccessTokenEndpoint innehåller till exempel en extra parameter som openid, som är en obligatorisk parameter förutom access_token i frågesträngen ClaimsEndpoint-begäran . Flera parameternamn ska vara undantagna och avgränsade med kommatecknet "", avgränsare.
token_endpoint_auth_method No Anger hur Azure AD B2C skickar autentiseringshuvudet till tokenslutpunkten. Möjliga värden: client_secret_post (standard) och client_secret_basic, private_key_jwt. Mer information finns i avsnittet OpenID Connect-klientautentisering.
token_signing_algorithm No Anger signeringsalgoritmen som ska användas när token_endpoint_auth_method är inställd på private_key_jwt. Möjliga värden: RS256 (standard) eller RS512.

Konfigurera HTTP-bindningsmetod

Som standard använder begäran till tokenslutpunkten HTTP POST.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">POST</Item>

Följande HTTP-anrop visar ett anrop till tokenslutpunkten med HTTP POST-begäran:

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

För identitetsprovidrar som kräver användning av HTTP GET-metoden vid /token slutpunkten anger du metadata till GETHttpBinding . Observera att i följande exempel AccessTokenResponseFormat är inställt på json, eftersom tokenslutpunkten returnerar svaret i JSON-format.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>
GET /oauth2/token?client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Konfigurera svarsformatet för åtkomsttoken

För identitetsprovidrar som stöder HTTP POST-metoden AccessTokenResponseFormat anges som standard till json. Om identitetsprovidern stöder HTTP GET-begäran måste du uttryckligen ange svarsformatet för åtkomsttoken.json

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>

I följande exempel visas ett tokenslutpunktssvar i JSON-format:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1637924390,
    "expires_in": 960000,
}

Konfigurera autentiseringsmetoden

Begäranden till tokenslutpunkten kräver alltid autentisering. Som standard tillhandahåller Azure AD B2C identitetsprovidern med klientautentiseringsuppgifter. Som standard är client_secret_postautentiseringsmetoden , inklusive klientautentiseringsuppgifterna (client_id och client_secret) i begärandetexten.

Följande HTTP-begäran till tokenslutpunkten innehåller client_id och client_secret i POST-data. För GET-begäranden client_id och client_secret ingår i frågesträngsparametrarna.

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

För identitetsprovidrar som kräver grundläggande HTTP-autentisering vid slutpunkten /token konfigurerar du metadata till token_endpoint_auth_methodclient_secret_basic. Med den här typen av autentiseringsmetod skickas klientautentiseringsuppgifterna till identitetsprovidern med hjälp av HTTP Basic-autentiseringsschemat.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>

Följande HTTP-begäran visar ett anrop till tokenslutpunkten med grundläggande HTTP-autentisering. Auktoriseringshuvudet innehåller klient-ID och klienthemlighet, i formatet client_ID:client_secret, base64-kodad.

POST /oauth2/token

Authorization: Basic YWJjZDoxMjM0

redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

För identitetsprovidrar som stöder JWT-autentisering med privat nyckel konfigurerar du metadata till token_endpoint_auth_methodprivate_key_jwt. Med den här typen av autentiseringsmetod används certifikatet som tillhandahålls till Azure AD B2C för att generera en signerad försäkran som skickas till identitetsprovidern via parametern client_assertion . Inställd client_assertion_typeurn:ietf:params:oauth:client-assertion-type:jwt-bearer. Metadata token_signing_algorithm anger signeringsalgoritmen för JWT-token.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">private_key_jwt</Item>
<Item Key="token_signing_algorithm">RS256</Item>

Följande HTTP-begäran visar ett anrop till tokenslutpunkten med hjälp av JWT-autentisering med privat nyckel.

POST /oauth2/token

client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IjJFRFg0dWRYeDIxbXNoaXdJVzczMUY3OUZSbFJiUDZXVXJyZmktR1RFeVkifQ.eyJpc3MiOiJhYmNkIiwiZXhwIjoxNjM3OTI5ODY0LCJuYmYiOjE2Mzc5Mjk1NjQsImF1ZCI6Imh0dHBzOi8vNWRlNC0xMDktNjQtMTI0LTUzLm5ncm9rLmlvL2FjY2Vzc190b2tlbiIsImp0aSI6IjVxQWlGV2lEODNDbU1KWWNrejBRdGc9PSIsInN1YiI6ImFiY2QiLCJpYXQiOjE2Mzc5Mjk1NjR9.C4OtRnrLaQatpT5LP45O5Nb418S4v8yZi_C42ld440w&client_id=abcd&client_assertion_type=urn%3aietf%3aparams%3aoauth%3aclient-assertion-type%3ajwt-bearer&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Slutpunktsmetadata för användarinformation

När Azure AD B2C hämtar åtkomsttoken från OAuth2-identitetsprovidern anropas användarinformationsslutpunkten. Slutpunkten för användarinformation, även kallad anspråksslutpunkt, är utformad för att hämta anspråk om den autentiserade användaren. Azure AD B2C använder ägartokenautentisering för att autentisera till slutpunkten för användarinformation för identitetsprovidrar. Ägartoken är den åtkomsttoken som Azure AD B2C hämtar från identitetsproviderns /token slutpunkt.

Begäran till användarinformationsslutpunkten är alltid HTTP GET. Åtkomsttoken skickas i en frågesträngsparameter med namnet access_token. Följande HTTP-begäran visar ett anrop till användarinformationsslutpunkten med åtkomsttoken i frågesträngsparametern.

GET /oauth2/claims?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5... 

I följande tabell visas metadata för användarinformationsslutpunkten.

Attribut Krävs Beskrivning
ClaimsEndpoint Ja URL:en för användarinformationsslutpunkten. Till exempel https://api.linkedin.com/v2/me.
ClaimsEndpointAccessTokenName No Namnet på frågesträngsparametern för åtkomsttoken. Standardvärde: access_token.
ClaimsEndpointFormatName No Namnet på frågesträngsparametern format. Du kan till exempel ange namnet som format i den här LinkedIn-anspråksslutpunkten https://api.linkedin.com/v1/people/~?format=json.
ClaimsEndpointFormat No Värdet för frågesträngsparametern format. Du kan till exempel ange värdet som json i den här LinkedIn-anspråksslutpunkten https://api.linkedin.com/v1/people/~?format=json.
BearerTokenTransmissionMethod No Anger hur token skickas. Standardmetoden är en frågesträng. Om du vill skicka token som ett begärandehuvud anger du till AuthorizationHeader.
ExtraParamsInClaimsEndpointRequest No Innehåller de extra parametrar som kan returneras i ClaimsEndpoint-begäran av vissa identitetsprovidrar. Flera parameternamn ska vara undantagna och avgränsade med kommatecknet "", avgränsare.

Konfigurera frågesträngsparametern för åtkomsttoken

Användarinformationsslutpunkten kan kräva att åtkomsttoken skickas i en viss frågesträngsparameter. Om du vill ändra namnet på frågesträngsparametern, som innehåller åtkomsttoken, använder du metadata.ClaimsEndpointAccessTokenName I följande exempel är frågesträngsparametern för åtkomsttoken inställd på token.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointAccessTokenName">token</Item>

Följande HTTP-anrop visar ett anrop till användarinformationsslutpunkten med ClaimsEndpointAccessTokenName inställt på token:

GET /oauth2/claims?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Konfigurera anspråksformatet

Med ClaimsEndpointFormatName och ClaimsEndpointFormat kan du skicka en frågesträngsparameter för nyckel/värde-par till användarinformationsslutpunkten. I följande exempel konfigureras en frågesträngsparameter med namnet format, med värdet json.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointFormatName">format</Item>
<Item Key="ClaimsEndpointFormat">json</Item>

Följande HTTP-begäran visar ett anrop till användarinformationsslutpunkten med ClaimsEndpointFormatName och ClaimsEndpointFormat konfigurerat.

GET /oauth2/claims?format=json&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Konfigurera överföringsmetod för ägartoken

Som standard skickas åtkomsttoken till slutpunkten för identitetsproviderns användarinformation via en frågesträngsparameter. Om du vill skicka token i HTTP-huvudet Authorization anger du BearerTokenTransmissionMethod metadata till AuthorizationHeader.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>

Följande HTTP-begäran visar hur åtkomsttoken skickas när BearerTokenTransmissionMethod är inställd på AuthorizationHeader.

GET /oauth2/claims

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Skicka parametrar som returneras av tokenslutpunkten

Vissa identitetsprovidrar måste skicka extra parametrar som returneras från tokenslutpunkten till användarinformationsslutpunkten. Svaret från tokenslutpunkten innehåller till exempel en parameter med namnet resource, som är en obligatorisk parameter för användarinformationsslutpunkten (förutom åtkomsttoken). Använd metadata för ExtraParamsInClaimsEndpointRequest att ange eventuella extra parametrar som ska skickas. Flera parameternamn ska vara undantagna och avgränsade med kommatecknet "", avgränsare.

Följande JSON visar en JSON-nyttolastretur av tokenslutpunkten med en parameter med namnet resource.

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 960000,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11"
}

Om du vill skicka parametern resource till användarinformationsslutpunkten lägger du till följande metadata:

<Item Key="ExtraParamsInClaimsEndpointRequest">resource</Item>

Följande HTTP-begäran visar hur parametern resource skickas till användarinformationsslutpunkten.

GET /oauth2/claims?resource=f2a76e08-93f2-4350-833c-965c02483b11&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Slutpunkt för slutsession

Om du vill logga ut användaren från programmet omdirigerar du användaren till Azure AD B2C-utloggningsslutpunkten (för både OAuth2 och OpenID Connect) eller skickar en LogoutRequest (för SAML). Azure AD B2C rensar användarens session från webbläsaren. Vid en utloggningsbegäran försöker Azure AD B2C logga ut från alla federerade identitetsprovidrar som användaren kan ha loggat in via. OAuth2-identitetsproviderns utloggnings-URI konfigureras i metadata.end_session_endpoint När användaren loggar ut från ditt program via Azure AD B2C skapas en dold iframe som anropar end_session_endpoint på deras Azure AD B2C-utloggningssida.

I följande tabell visas metadata för användarinformationsslutpunkten.

Attribut Krävs Beskrivning
end_session_endpoint Ja URL:en för slutsessionens slutpunkt enligt RFC 6749.
SingleLogoutEnabled No Anger om den tekniska profilen försöker logga ut från federerade identitetsprovidrar under inloggningen. Mer information finns i logga ut Azure AD B2C-session. Möjliga värden: true (standard) eller false.

Allmänna OAuth2-metadata

I följande tabell visas allmänna metadata för OAuth2-identitetsprovidern. Metadata beskriver hur den tekniska OAuth2-profilen hanterar tokenvalidering, hämtar anspråken och reagerar på felmeddelanden.

Attribut Krävs Beskrivning
IdTokenAudience Nej Publiken på id_token. Om det anges kontrollerar Azure AD B2C om token finns i ett anspråk som returneras av identitetsprovidern och är lika med det som anges.
ProviderName No Namnet på identitetsprovidern.
ResponseErrorCodeParamName No Namnet på parametern som innehåller felmeddelandet som returneras via HTTP 200 (Ok).
IncludeClaimResolvingInClaimsHandling   No För indata- och utdataanspråk anger om anspråksmatchning ingår i den tekniska profilen. Möjliga värden: true, eller false (standard). Om du vill använda en anspråksmatchare i den tekniska profilen anger du detta till true.
ResolveJsonPathsInJsonTokens No Anger om den tekniska profilen matchar JSON-sökvägar. Möjliga värden: true, eller false (standard). Använd dessa metadata för att läsa data från ett kapslat JSON-element. I ett OutputClaim anger du PartnerClaimType till det JSON-sökvägselement som du vill mata ut. Exempel: firstName.localized, eller data[0].to[0].email.

Krypteringsnycklar

Elementet CryptographicKeys innehåller följande attribut:

Attribut Krävs Beskrivning
client_secret Ja Klienthemligheten för identitetsproviderprogrammet. Den kryptografiska nyckeln krävs bara om response_types metadata är inställt på code. I det här fallet gör Azure AD B2C ytterligare ett anrop för att byta auktoriseringskoden mot en åtkomsttoken. Om metadata är inställda på id_tokenkan du utelämna den kryptografiska nyckeln.
assertion_signing_key No token_endpoint_auth_method När metadata har angetts till private_key_jwtanger du ett X509-certifikat som ska användas för att signera JWT-nyckeln. Den här nyckeln ska tillhandahållas av OAuth2-identitetsprovidern.

Omdirigerings-URI

När du konfigurerar omdirigerings-URI för din identitetsprovider anger du https://{tenant-name}.b2clogin.com/{tenant-name}.onmicrosoft.com/oauth2/authresp. Ersätt {tenant-name} med klientorganisationens namn (till exempel contosob2c). Omdirigerings-URI:n måste vara i gemener.

Nästa steg