Erőforrás-tulajdonosi jelszó hitelesítő adatainak beállítása az Azure Active Directory B2C-ben
Mielőtt hozzákezdene, a Szabályzattípus kiválasztása választóval válassza ki a beállított szabályzat típusát. Az Azure Active Directory B2C két módszert kínál annak meghatározására, hogy a felhasználók hogyan használják az alkalmazásokat: előre definiált felhasználói folyamatokon vagy teljesen konfigurálható egyéni szabályzatokon keresztül. A cikkben szereplő lépések különbözőek az egyes metódusok esetében.
Az Azure Active Directory B2C -ben (Azure AD B2C) az erőforrás-tulajdonosi jelszó hitelesítő adatainak (ROPC) folyamata egy OAuth standard hitelesítési folyamat. Ebben a folyamatban egy alkalmazás, más néven a függő entitás érvényes hitelesítő adatokat cserél a jogkivonatokra. A hitelesítő adatok tartalmazzák a felhasználói azonosítót és a jelszót. A visszaadott jogkivonatok azonosító jogkivonatok, hozzáférési jogkivonatok és frissítési jogkivonatok.
Figyelmeztetés:
Javasoljuk, hogy ne használja a ROPC-folyamatot. A legtöbb forgatókönyvben biztonságosabb alternatívák érhetők el és ajánlottak. Ez a folyamat nagyon nagy fokú bizalmat igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha más biztonságosabb folyamatok nem életképesek.
ROPC-folyamat megjegyzései
Az Azure Active Directory B2C-ben (Azure AD B2C) a következő lehetőségek támogatottak:
- Natív ügyfél: A hitelesítés során a felhasználó beavatkozása akkor történik, ha a kód felhasználóoldali eszközön fut. Az eszköz lehet natív operációs rendszeren futó mobilalkalmazás, például Android és iOS.
- Nyilvános ügyfélfolyamat: Az API-hívásban csak az alkalmazás által összegyűjtött felhasználói hitelesítő adatok lesznek elküldve. A rendszer nem küldi el az alkalmazás hitelesítő adatait.
- Új jogcímek hozzáadása: Az azonosító jogkivonat tartalma módosítható új jogcímek hozzáadásához.
A következő folyamatok nem támogatottak:
- Kiszolgálóról kiszolgálóra: Az identitásvédelmi rendszernek megbízható IP-címre van szüksége, amely a hívótól (a natív ügyféltől) származik az interakció részeként. Egy kiszolgálóoldali API-hívásban csak a kiszolgáló IP-címét használja a rendszer. Ha túllépi a sikertelen hitelesítések dinamikus küszöbértékét, az identitásvédelmi rendszer ismétlődő IP-címet azonosíthat támadóként.
- Bizalmas ügyfélfolyamat: Az alkalmazás ügyfélazonosítója érvényesítve van, de az alkalmazás titkos kódja nincs érvényesítve.
A ROPC-folyamat használatakor vegye figyelembe a következőket:
- A ROPC nem működik, ha a hitelesítési folyamat megszakad, és felhasználói beavatkozásra van szükség. Ha például lejárt egy jelszó, vagy módosítani kell, többtényezős hitelesítésre van szükség, vagy ha több információt kell gyűjteni a bejelentkezés során (például felhasználói hozzájárulás).
- A ROPC csak a helyi fiókokat támogatja. A felhasználók nem jelentkezhetnek be olyan összevont identitásszolgáltatókkal, mint a Microsoft, a Google+, a Twitter, az AD-FS vagy a Facebook.
- A munkamenet-kezelés, beleértve a bejelentkezést (KMSI) is, nem alkalmazható.
Register an application
Alkalmazásnak az Azure AD B2C-bérlőben történő regisztrálásához használhatja az új, egységes Appok regisztrálása szolgáltatást vagy a korábbi Alkalmazások (örökölt) szolgáltatást. További információ az új felületről.
- Jelentkezzen be az Azure Portalra.
- Győződjön meg arról, hogy az Azure AD B2C-bérlőt tartalmazó könyvtárat használja:
- Válassza a Címtárak + előfizetések ikont a portál eszköztárán.
- A Portál beállításai | Címtárak + előfizetések lap, keresse meg az Azure AD B2C-címtárat a címtárnévlistában, majd válassza a Váltás lehetőséget.
- Az Azure Portalon keresse meg és válassza ki az Azure AD B2C-t
- Válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.
- Adja meg az alkalmazás nevét. Például ROPC_Auth_app.
- Hagyja meg a többi értéket, és válassza a Regisztráció lehetőséget.
- Jegyezze fel az alkalmazás (ügyfél) azonosítóját egy későbbi lépésben való használatra.
- A Kezelés területen válassza a Hitelesítés lehetőséget.
- Válassza az Új felület kipróbálása (ha megjelenik) lehetőséget.
- A Speciális beállítások és szakasz Az alábbi mobil- és asztali folyamatok engedélyezése területen válassza az Igen lehetőséget az alkalmazás nyilvános ügyfélként való kezeléséhez. Ez a beállítás szükséges a ROPC-folyamathoz.
- Válassza a Mentés parancsot.
- A bal oldali menüben válassza a Jegyzék elemet a jegyzékszerkesztő megnyitásához.
- Állítsa az oauth2AllowImplicitFlow attribútumot igaz értékre:
"oauth2AllowImplicitFlow": true,
- Válassza a Mentés parancsot.
Erőforrás-tulajdonosi felhasználói folyamat létrehozása
- Jelentkezzen be az Azure Portalra az Azure AD B2C-bérlő globális rendszergazdájaként .
- Ha több bérlőhöz is hozzáfér, a felső menüben válassza a Gépház ikont az Azure AD B2C-bérlőre való váltáshoz a Címtárak + előfizetések menüből.
- Az Azure Portalon keresse meg és válassza ki az Azure AD B2C-t.
- Válassza a Felhasználói folyamatok lehetőséget, majd az Új felhasználói folyamatot.
- Válassza a Bejelentkezés erőforrás-tulajdonosi jelszó hitelesítő adataival (ROPC) lehetőséget.
- A Verzió területen győződjön meg arról, hogy az Előzetes verzió ki van jelölve, majd válassza a Létrehozás lehetőséget.
- Adjon nevet a felhasználói folyamatnak, például ROPC_Auth.
- Az Alkalmazásjogcímek csoportban válassza a Továbbiak megjelenítése lehetőséget.
- Válassza ki az alkalmazáshoz szükséges alkalmazásjogcímeket, például a megjelenítendő nevet, az e-mail-címet és az identitásszolgáltatót.
- Kattintson az OK, majd a Létrehozás gombra.
Előfeltétel
Ha még nem tette meg, ismerkedjen meg az egyéni szabályzatok kezdőcsomagjával az Egyéni szabályzatok használatának első lépései az Active Directory B2C-ben.
Erőforrás-tulajdonosi szabályzat létrehozása
Nyissa meg az TrustFrameworkExtensions.xml fájlt.
Ha még nem létezik, adjon hozzá egy ClaimsSchema elemet és annak gyermekelemeit a BuildingBlocks elem első elemeként:
<ClaimsSchema> <ClaimType Id="logonIdentifier"> <DisplayName>User name or email address that the user can use to sign in</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="resource"> <DisplayName>The resource parameter passes to the ROPC endpoint</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="refreshTokenIssuedOnDateTime"> <DisplayName>An internal parameter used to determine whether the user should be permitted to authenticate again using their existing refresh token.</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="refreshTokensValidFromDateTime"> <DisplayName>An internal parameter used to determine whether the user should be permitted to authenticate again using their existing refresh token.</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
A ClaimsSchema után adjon hozzá egy ClaimsTransformations elemet és annak gyermekelemeit a BuildingBlocks elemhez:
<ClaimsTransformations> <ClaimsTransformation Id="CreateSubjectClaimFromObjectID" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="Not supported currently. Use oid claim." /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="sub" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="AssertRefreshTokenIssuedLaterThanValidFromDate" TransformationMethod="AssertDateTimeIsGreaterThan"> <InputClaims> <InputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" TransformationClaimType="leftOperand" /> <InputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" TransformationClaimType="rightOperand" /> </InputClaims> <InputParameters> <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" /> <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" /> </InputParameters> </ClaimsTransformation> </ClaimsTransformations>
Keresse meg a DisplayName
Local Account SignIn
elemhez tartozó ClaimsProvider elemet, és adja hozzá a következő technikai profilt:<TechnicalProfile Id="ResourceOwnerPasswordCredentials-OAUTH2"> <DisplayName>Local Account SignIn</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We can't seem to find your account</Item> <Item Key="UserMessageIfInvalidPassword">Your password is incorrect</Item> <Item Key="UserMessageIfOldPasswordUsed">Looks like you used an old password</Item> <Item Key="DiscoverMetadataByTokenIssuer">true</Item> <Item Key="ValidTokenIssuerPrefixes">https://sts.windows.net/</Item> <Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item> <Item Key="authorization_endpoint">https://login.microsoftonline.com/{tenant}/oauth2/token</Item> <Item Key="response_types">id_token</Item> <Item Key="response_mode">query</Item> <Item Key="scope">email openid</Item> <Item Key="grant_type">password</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="logonIdentifier" PartnerClaimType="username" Required="true" DefaultValue="{OIDC:Username}"/> <InputClaim ClaimTypeReferenceId="password" Required="true" DefaultValue="{OIDC:Password}" /> <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" /> <InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" /> <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" /> <InputClaim ClaimTypeReferenceId="client_id" DefaultValue="ProxyIdentityExperienceFrameworkAppId" /> <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="IdentityExperienceFrameworkAppId" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" /> <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="upn" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromObjectID" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
Cserélje le a client_id DefaultValue értékét az előfeltétel-oktatóanyagban létrehozott ProxyIdentityExperienceFramework alkalmazásazonosítójára. Ezután cserélje le a resource_id DefaultValue értékét az előfeltételként szolgáló oktatóanyagban is létrehozott IdentityExperienceFramework alkalmazás azonosítójára.
Adja hozzá a következő ClaimsProvider-elemeket a technikai profilokkal a ClaimsProviders elemhez :
<ClaimsProvider> <DisplayName>Azure Active Directory</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AAD-UserReadUsingObjectId-CheckRefreshTokenDate"> <Metadata> <Item Key="Operation">Read</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="AssertRefreshTokenIssuedLaterThanValidFromDate" /> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromObjectID" /> </OutputClaimsTransformations> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <DisplayName>Session Management</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SM-RefreshTokenReadAndSetup"> <DisplayName>Trustframework Policy Engine Refresh Token Setup Technical Profile</DisplayName> <Protocol Name="None" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <Metadata> <!-- Point to the redeem refresh token user journey--> <Item Key="RefreshTokenUserJourneyId">ResourceOwnerPasswordCredentials-RedeemRefreshToken</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Adjon hozzá egy UserJourneys elemet és annak gyermekelemeit az TrustFrameworkPolicy elemhez:
<UserJourney Id="ResourceOwnerPasswordCredentials"> <PreserveOriginalAssertion>false</PreserveOriginalAssertion> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="ResourceOwnerFlow" TechnicalProfileReferenceId="ResourceOwnerPasswordCredentials-OAUTH2" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney> <UserJourney Id="ResourceOwnerPasswordCredentials-RedeemRefreshToken"> <PreserveOriginalAssertion>false</PreserveOriginalAssertion> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="RefreshTokenSetupExchange" TechnicalProfileReferenceId="SM-RefreshTokenReadAndSetup" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="CheckRefreshTokenDateFromAadExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId-CheckRefreshTokenDate" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
Az Azure AD B2C-bérlő Egyéni szabályzatok lapján válassza a Szabályzat feltöltése lehetőséget.
Ha létezik, engedélyezze a szabályzat felülírását, majd keresse meg és válassza ki az TrustFrameworkExtensions.xml fájlt.
Válassza a Feltöltés lehetőséget.
Függő entitásfájl létrehozása
Ezután frissítse a létrehozott felhasználói folyamatot kezdeményező függő entitásfájlt:
Készítsen másolatot a SignUpOrSignin.xml fájlról a munkakönyvtárban, és nevezze át ROPC_Auth.xml fájlra.
Nyissa meg az új fájlt, és módosítsa az TrustFrameworkPolicy PolicyId attribútumának értékét egyedi értékre. A szabályzat azonosítója a szabályzat neve. Például B2C_1A_ROPC_Auth.
Módosítsa a DefaultUserJourney ReferenceId attribútumának értékét a következőre
ResourceOwnerPasswordCredentials
: .Módosítsa úgy a OutputClaims elemet, hogy csak a következő jogcímeket tartalmazza:
<OutputClaim ClaimTypeReferenceId="sub" /> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="displayName" DefaultValue="" /> <OutputClaim ClaimTypeReferenceId="givenName" DefaultValue="" /> <OutputClaim ClaimTypeReferenceId="surname" DefaultValue="" />
Az Azure AD B2C-bérlő Egyéni szabályzatok lapján válassza a Szabályzat feltöltése lehetőséget.
Ha létezik, engedélyezze a szabályzat felülírását, majd keresse meg és válassza ki a ROPC_Auth.xml fájlt.
Válassza a Feltöltés lehetőséget.
A ROPC-folyamat tesztelése
A kedvenc API-fejlesztőalkalmazásával hozzon létre egy API-hívást, és tekintse át a szabályzat hibakeresésére adott választ. Hozzon létre egy ehhez hasonló hívást a POST-kérés törzseként az alábbi információkkal:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token
- Cserélje le
<tenant-name>
az Azure AD B2C-bérlő nevét. - Cserélje le
B2C_1A_ROPC_Auth
az erőforrás-tulajdonos jelszó hitelesítő adataira vonatkozó szabályzat teljes nevére.
Key | Érték |
---|---|
username | user-account |
jelszó | password1 |
grant_type | jelszó |
scope | openid application-id offline_access |
client_id | application-id |
response_type | token id_token |
- Cserélje le
user-account
a bérlőben lévő felhasználói fiók nevére. - Cserélje le
password1
a felhasználói fiók jelszavára. - Cserélje le
application-id
a ROPC_Auth_app regisztrációból származó alkalmazásazonosítóra. - Offline_access nem kötelező, ha frissítési jogkivonatot szeretne kapni.
A tényleges POST-kérelem a következő példához hasonlóan néz ki:
POST /<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
username=contosouser.outlook.com.ws&password=Passxword1&grant_type=password&scope=openid+bef22d56-552f-4a5b-b90a-1988a7d634ce+offline_access&client_id=bef22d56-552f-4a5b-b90a-1988a7d634ce&response_type=token+id_token
Az offline hozzáféréssel rendelkező sikeres válasz a következő példához hasonlóan néz ki:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9YQjNhdTNScWhUQWN6R0RWZDM5djNpTmlyTWhqN2wxMjIySnh6TmgwRlki...",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "eyJraWQiOiJacW9pQlp2TW5pYVc2MUY0TnlfR3REVk1EVFBLbUJLb0FUcWQ1ZWFja1hBIiwidmVyIjoiMS4wIiwiemlwIjoiRGVmbGF0ZSIsInNlciI6Ij...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9YQjNhdTNScWhUQWN6R0RWZDM5djNpTmlyTWhqN2wxMjIySnh6TmgwRlki..."
}
Frissítési jogkivonat beváltása
Hozzon létre egy POST-hívást az itt láthatóhoz hasonlóan. A kérelem törzseként használja az alábbi táblázatban szereplő információkat:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token
- Cserélje le
<tenant-name>
az Azure AD B2C-bérlő nevét. - Cserélje le
B2C_1A_ROPC_Auth
az erőforrás-tulajdonos jelszó hitelesítő adataira vonatkozó szabályzat teljes nevére.
Key | Érték |
---|---|
grant_type | refresh_token |
response_type | id_token |
client_id | application-id |
erőforrás | application-id |
refresh_token | refresh-token |
- Cserélje le
application-id
a ROPC_Auth_app regisztrációból származó alkalmazásazonosítóra. - Cserélje le
refresh-token
az előző válaszban visszaküldött refresh_token .
A sikeres válasz a következő példához hasonlóan néz ki:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhT...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQn...",
"token_type": "Bearer",
"not_before": 1533672990,
"expires_in": 3600,
"expires_on": 1533676590,
"resource": "bef2222d56-552f-4a5b-b90a-1988a7d634c3",
"id_token_expires_in": 3600,
"profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiI1MTZmYzA2NS1mZjM2LTRiOTMtYWE1YS1kNmVlZGE3Y2JhYzgiLCJzdWIiOm51bGwsIm5hbWUiOiJEYXZpZE11IiwicHJlZmVycmVkX3VzZXJuYW1lIjpudWxsLCJpZHAiOiJMb2NhbEFjY291bnQifQ",
"refresh_token": "eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAi...",
"refresh_token_expires_in": 1209600
}
Hibaelhárítás
A megadott alkalmazás nincs konfigurálva az OAuth implicit folyamat engedélyezésére
- Hibajelenség – Futtatja a ROPC-folyamatot, és a következő üzenetet kapja: AADB2C90057: A megadott alkalmazás nincs konfigurálva az OAuth implicit folyamat engedélyezésére.
- Lehetséges okok – Az implicit folyamat nem engedélyezett az alkalmazás számára.
- Megoldás: Amikor az alkalmazásregisztrációt az Azure AD B2C-ben hozza létre, manuálisan kell szerkesztenie az alkalmazásjegyzéket, és be kell állítania a
oauth2AllowImplicitFlow
tulajdonságtrue
értékét. A tulajdonság konfigurálásaoauth2AllowImplicitFlow
után eltarthat néhány percig (általában legfeljebb ötig), amíg a módosítás hatással lesz rá.
Natív SDK vagy App-Auth használata
Az Azure AD B2C megfelel az OAuth 2.0 szabványnak a nyilvános ügyfélerőforrás-tulajdonos jelszavas hitelesítő adataihoz, és kompatibilisnek kell lennie a legtöbb ügyféloldali SDK-val. A legújabb információkért lásd: Natív alkalmazás SDK for OAuth 2.0 és OpenID Csatlakozás modern ajánlott eljárások implementálása.
Következő lépések
Az Azure AD B2C-vel való használatra konfigurált munkaminták letöltése a GitHubról, Androidra és iOS-hez.