Dela via


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

Viktigt!

Från och med den 1 maj 2025 är Azure AD B2C inte längre tillgängligt att köpa för nya kunder. Läs mer i våra vanliga frågor och svar.

Anmärkning

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) tillhandahåller 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. Federering med en identitetsprovider gör det möjligt för användare att logga in med sina befintliga sociala identiteter eller företagsidentiteter.

Protokoll

Attributet Namn för protokollelementet 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 med värdet contoso.com för till auktoriseringsbegäran.

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

Utdataanspråk

OutputClaims-elementet 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 det namn 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 attributet mappas till givenName attributet.
  • last_name-anspråket mappas till efternamn-anspråket.
  • DisplayName-anspråket utan namnmappning.
  • E-postanspråket utan namnmappning.

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

  • Anspråket identityProvider som innehåller namnet på identitetsprovidern.
  • Anspråket authenticationSource 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. I det här läget uppmanas användaren att slutföra inloggningen hos 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 metadata för auktoriseringsslutpunkten, som 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.

Egenskap Krävs Beskrivning
authorization_endpoint Ja URL:en för auktoriseringsslutpunkten enligt RFC 6749.
client_id Ja Programidentifieraren för identitetsprovidern.
AdditionalRequestQueryParameters Nej 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 Nej 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 Nej Omfånget för den begäran som definieras enligt specifikationen för OAuth2-identitetsprovidern. Till exempel openid, profileoch email.
UsePolicyInRedirectUri Nej 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. Till 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.

Egenskap Krävs Beskrivning
AccessTokenEndpoint Ja URL:en för tokenslutpunkten. Till exempel https://www.linkedin.com/oauth/v2/accessToken.
HttpBinding Nej Den förväntade HTTP-bindningen till tokenslutpunkten. Möjliga värden: GET eller POST.
AccessTokenResponseFormat Nej 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 Nej 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, till exempel openid, som är en obligatorisk parameter förutom access_token i en Frågesträng för ClaimsEndpoint-begäran . Flera parameternamn ska vara undantagna och avgränsade med kommatecknet "", avgränsare.
token_endpoint_auth_method Nej 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 Nej Anger den signeringsalgoritm 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 HttpBindingGET . 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 ange svarsformatet för åtkomsttoken till json explicit.

<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 privata nycklar 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ällningen client_assertion_type är urn:ietf:params:oauth:client-assertion-type:jwt-bearer. Metadata token_signing_algorithm anger signeringsalgoritmen för JWT.

<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 gör den ett anrop till 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 identitetsproviderns användarinformationsslutpunkt. Ä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.

Egenskap Krävs Beskrivning
ClaimsEndpoint Ja URL:en för användarinformationsslutpunkten. Till exempel https://api.linkedin.com/v2/me.
ClaimsEndpointAccessTokenName Nej Namnet på frågesträngsparametern för åtkomsttoken. Standardvärde: access_token.
ClaimsEndpointFormatName Nej 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 Nej 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 Nej Anger hur token skickas. Standardmetoden är en frågesträng. Om du vill skicka token som en begäranderubrik anger du till AuthorizationHeader.
ExtraParamsInClaimsEndpointRequest Nej 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 konfigurerad.

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

Passparametrar 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-nyttolast som returneras 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 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 inloggningssidan för Azure AD B2C.

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

Egenskap Krävs Beskrivning
end_session_endpoint Ja URL:en för slutsessionens slutpunkt enligt RFC 6749.
SingleLogoutEnabled Nej Anger om den tekniska profilen under inloggningen försöker logga ut från federerade identitetsprovidrar. Mer information finns i Azure AD B2C-sessionsinloggning. 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 tokenverifiering, hämtar anspråken och reagerar på felmeddelanden.

Egenskap Krävs Beskrivning
IdTokenAudience Nej Målgruppen för 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 Nej Namnet på identitetsleverantören.
ResponseErrorCodeParamName Nej Namnet på parametern som innehåller felmeddelandet som returneras via HTTP 200 (OK).
IncludeClaimResolvingInClaimsHandling   Nej 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åkslösare i den tekniska profilen anger du detta till true.
ResolveJsonPathsInJsonTokens Nej Anger om den tekniska profilen löser 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 en OutputClaim anger du PartnerClaimType till det JSON-sökvägselement som du vill mata ut. Till exempel: firstName.localized, eller data[0].to[0].email.

Krypteringsnycklar

CryptographicKeys-elementet innehåller följande attribut:

Egenskap Krävs Beskrivning
client_secret Ja Klienthemligheten för identitetsproviderprogrammet. Den kryptografiska nyckeln krävs endast om response_types metadata har angetts till 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 Nej 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.

URI för omdirigering

När du konfigurerar omdirigerings-URI:n 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 finnas i alla gemener.