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 OAuth2
till 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 , profile och 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 true må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 , Json och 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 GET
HttpBinding
. 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_post
autentiseringsmetoden , 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_method
client_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_method
private_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_type
på urn: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_token kan du utelämna den kryptografiska nyckeln. |
assertion_signing_key |
No |
token_endpoint_auth_method När metadata har angetts till private_key_jwt anger 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.