Konfigurace xID s Azure Active Directory B2C pro ověřování bez hesla
V tomto kurzu se naučíte integrovat ověřování Azure Active Directory B2C (Azure AD B2C) s řešením digitálního ID xID. Aplikace xID poskytuje uživatelům bezpečné vícefaktorové ověřování bez hesla. Karta Moje číslo, digitální identifikační karta vydaná japonskou vládou, ověřuje identity uživatelů ověřené xID. Organizace mohou pro své uživatele získat ověřené osobní identifikační údaje (obsah zákazníka) prostřednictvím rozhraní xID API. Aplikace xID navíc vygeneruje privátní klíč v zabezpečené oblasti v mobilních zařízeních uživatelů, což z nich dělá digitální podpisová zařízení.
Předpoklady
Předplatné Azure
- Pokud ho nemáte, můžete získat bezplatný účet Azure.
Tenant Azure AD B2C propojený s předplatným Azure
Informace o klientovi xID poskytnuté společností xID inc.
Přejděte na stránku xid.inc Kontaktujte nás , kde najdete informace o klientovi xID:
- ID klienta
- Tajný klíč klienta
- Redirect URL
- Obory
Přejděte na x-id.me a nainstalujte aplikaci xID na mobilní zařízení:
- Karta s číslem
- Pokud používáte verzi ROZHRANÍ API UAT, získejte verzi UAT aplikace xID. Viz Kontaktujte nás.
Popis scénáře
Následující diagram znázorňuje architekturu.
- Na přihlašovací stránce Azure AD B2C se uživatel přihlásí nebo zaregistruje.
- Azure AD B2C přesměruje uživatele na koncový bod rozhraní API autorizace xID pomocí požadavku OpenID Connect (OIDC). Koncový bod OIDC obsahuje informace o koncovém bodu. Zprostředkovatel identity xID přesměruje uživatele na přihlašovací stránku autorizace xID. Uživatel zadá e-mailovou adresu.
- Zprostředkovatele identity xID odesílá nabízené oznámení mobilnímu zařízení uživatele.
- Uživatel otevře aplikaci xID, zkontroluje požadavek, zadá PIN kód nebo použije biometriku. Aplikace xID aktivuje privátní klíč a vytvoří elektronický podpis.
- Aplikace xID odešle podpis zprostředkovatele identity xID k ověření.
- Zobrazí se obrazovka souhlasu s poskytnutím osobních údajů službě.
- xID IdP vrátí autorizační kód OAuth pro Azure AD B2C.
- Azure AD B2C odešle žádost o token pomocí autorizačního kódu.
- xID IdP zkontroluje žádost o token. Pokud je platný, vrátí se přístupový token OAuth a token ID s identifikátorem uživatele a e-mailovou adresou.
- Pokud je potřeba obsah zákazníka uživatele, Azure AD B2C volá rozhraní API uživatelských dat xID.
- Rozhraní API uživatelských dat xID vrací šifrovaný zákaznický obsah. Uživatelé dešifrují pomocí privátního klíče, který se vytvoří při vyžádání informací o klientovi xID.
- Uživateli je udělen nebo odepřen přístup k aplikaci zákazníka.
Instalace xID
- Pokud chcete požádat o dokumenty rozhraní API, vyplňte formulář žádosti. Přejděte na Kontaktujte nás.
- Ve zprávě uveďte, že používáte Azure AD B2C.
- Kontaktuje vás obchodní zástupce xID.
- Postupujte podle pokynů v dokumentu k rozhraní API xID.
- Vyžádejte si klienta rozhraní API xID.
- Technický tým xID vám pošle informace o klientovi během 3 až 4 pracovních dnů.
- Zadejte identifikátor URI přesměrování ve vaší lokalitě pomocí následujícího vzoru. Uživatelé se k němu po ověření vrátí.
https://<your-b2c-domain>.b2clogin.com/<your-b2c-domain>.onmicrosoft.com/oauth2/authresp
Registrace webové aplikace v Azure AD B2C
Zaregistrujte aplikace v tenantovi, který spravujete, a pak můžou komunikovat s Azure AD B2C.
Další informace: Typy aplikací, které je možné použít v Active Directory B2C
Pro účely testování zaregistrujete https://jwt.ms
webovou aplikaci Microsoftu s dekódovaným obsahem tokenů, které neopustí váš prohlížeč.
Registrace webové aplikace a povolení implicitního udělení tokenu ID
Dokončení kurzu: Registrace webové aplikace v Azure AD B2C
Vytvoření klíče zásad xID
Uložte tajný klíč klienta z xID do tenanta Azure AD B2C. Následující pokyny najdete v adresáři s tenantem Azure AD B2C.
- Přihlaste se k webu Azure Portal.
- Na panelu nástrojů portálu vyberte Adresáře a předplatná.
- V nastavení portálu | Na stránce Adresáře a předplatná vyhledejte v seznamu Název adresáře svůj adresář Azure AD B2C.
- Vyberte Přepnout.
- V levém horním rohu Azure Portal vyberte Všechny služby.
- Vyhledejte a vyberte Azure AD B2C.
- V části Přehled vyberte Identity Experience Framework.
- Vyberte Klíče zásad.
- Vyberte Přidat.
- V části Možnosti vyberte Ručně.
- Zadejte klíč zásady Název klíče zásad. Předpona
B2C_1A_
se připojí k názvu klíče. - Do pole Tajný kód zadejte tajný klíč klienta z xID.
- V části Použití klíče vyberte Podpis.
- Vyberte Vytvořit.
Poznámka
V Azure AD B2C jsou vlastní zásady určené pro složité scénáře.
Konfigurace xID jako zprostředkovatele identity
Aby se uživatelé mohli přihlásit pomocí xID, nastavte xID jako zprostředkovatele deklarací identity, se kterým Azure AD B2C komunikuje prostřednictvím koncového bodu. Koncový bod poskytuje deklarace identity, Azure AD B2C používá k ověření uživatelů ověřených na jejich zařízení digitální identitou.
Přidání xID jako zprostředkovatele deklarací identity
Získejte úvodní balíčky vlastních zásad z GitHubu a pak aktualizujte soubory XML v úvodní sadě SocialAccounts názvem vašeho Azure AD tenanta B2C.
Stáhněte soubor zip active-directory-b2c-policy-starterpack-main nebo naklonujte úložiště. Viz Azure-Samples/active-directory-b2c-custom-policy-starterpack.
V souborech v adresáři SocialAccounts nahraďte řetězec
yourtenant
názvem vašeho tenanta Azure AD B2C. Například se změní nayourtenant.onmicrosoft.com
contoso.onmicrosoft.com
.Otevřete SocialAccounts/TrustFrameworkExtensions.xml.
Vyhledejte element ClaimsProviders . Pokud žádný neexistuje, přidejte ho do kořenového elementu.
Přidejte nový ClaimsProvider podobný následujícímu příkladu:
<ClaimsProvider> <Domain>X-ID</Domain> <DisplayName>X-ID</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="X-ID-OIDC"> <DisplayName>X-ID</DisplayName> <Description>Login with your X-ID account</Description> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="METADATA">https://oidc-uat.x-id.io/.well-known/openid-configuration</Item> <!-- Update the Client ID below to the X-ID Application ID --> <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid verification</Item> <Item Key="response_mode">query</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="DiscoverMetadataByTokenIssuer">true</Item> <Item Key="token_endpoint_auth_method">client_secret_basic</Item> <Item Key="ClaimsEndpoint">https://oidc-uat.x-id.io/userinfo</Item> <Item Key="ValidTokenIssuerPrefixes">https://oidc-uat.x-id.io/</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_XIDSecAppSecret" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" /> <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid" /> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="sid" /> <OutputClaim ClaimTypeReferenceId="userdataid" /> <OutputClaim ClaimTypeReferenceId="XID_verified" /> <OutputClaim ClaimTypeReferenceId="email_verified" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" DefaultValue="https://oidc-uat.x-id.io/" /> <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" /> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" /> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" /> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> <TechnicalProfile Id="X-ID-Userdata"> <DisplayName>Userdata (Personal Information)</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://api-uat.x-id.io/v4/verification/userdata</Item> <Item Key="SendClaimsIn">Header</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">identityProviderAccessToken</Item> <!-- <Item Key="AllowInsecureAuthInProduction">true</Item> --> <Item Key="DebugMode">true</Item> <Item Key="DefaultUserMessageIfRequestFailed">Can't process your request right now, please try again later.</Item> </Metadata> <InputClaims> <!-- Claims sent to your REST API --> <InputClaim ClaimTypeReferenceId="identityProviderAccessToken" /> </InputClaims> <OutputClaims> <!-- Claims parsed from your REST API --> <OutputClaim ClaimTypeReferenceId="last_name" /> <OutputClaim ClaimTypeReferenceId="first_name" /> <OutputClaim ClaimTypeReferenceId="previous_name" /> <OutputClaim ClaimTypeReferenceId="year" /> <OutputClaim ClaimTypeReferenceId="month" /> <OutputClaim ClaimTypeReferenceId="date" /> <OutputClaim ClaimTypeReferenceId="prefecture" /> <OutputClaim ClaimTypeReferenceId="city" /> <OutputClaim ClaimTypeReferenceId="address" /> <OutputClaim ClaimTypeReferenceId="sub_char_common_name" /> <OutputClaim ClaimTypeReferenceId="sub_char_previous_name" /> <OutputClaim ClaimTypeReferenceId="sub_char_address" /> <OutputClaim ClaimTypeReferenceId="gender" /> <OutputClaim ClaimTypeReferenceId="verified_at" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Nastavte client_id pomocí ID aplikace xID.
Vyberte Uložit.
Přidání cesty uživatele
Přidejte zprostředkovatele identity na přihlašovací stránky.
- Pokud máte vlastní cestu uživatele, přejděte na přidání zprostředkovatele identity k cestě uživatele. V opačném případě vytvořte duplikát cesty uživatele šablony:
- V úvodním balíčku otevřete TrustFrameworkBase.xml.
- Vyhledejte a zkopírujte obsah elementu UserJourneys , který obsahuje
ID=SignUpOrSignIn
. - Otevřete TrustFrameworkExtensions.xml a vyhledejte element UserJourneys. Pokud žádný neexistuje, přidejte ho.
- Vložte obsah elementu UserJourney jako podřízený prvek UserJourneys.
- Přejmenujte ID cesty uživatele. Například
ID=CustomSignUpSignIn
.
Přidání zprostředkovatele identity na cestu uživatele
Přidejte nového zprostředkovatele identity na cestu uživatele.
- Vyhledejte element kroku orchestrace s Type=
CombinedSignInAndSignUp
, nebo Type=ClaimsProviderSelection
na cestě uživatele. Obvykle se jedná o první krok orchestrace. Element ClaimsProviderSelections obsahuje seznam zprostředkovatelů identity pro přihlášení. Pořadí prvků řídí pořadí tlačítek pro přihlášení. - Přidejte element XML ClaimsProviderSelection .
- Nastavte hodnotu TargetClaimsExchangeId na popisný název.
- Přidejte element ClaimsExchange .
- Nastavte ID na hodnotu ID cílového ID výměny deklarací identity. Tato změna prováže tlačítko xID s
X-IDExchange
akcí. - Aktualizujte hodnotu TechnicalProfileReferenceId na ID technického profilu, které jste vytvořili (
X-ID-OIDC
). - Přidejte krok Orchestrace pro volání koncového bodu xID UserInfo pro vrácení deklarací identity ověřeného uživatele
X-ID-Userdata
.
Následující kód XML ukazuje orchestraci cesty uživatele pomocí zprostředkovatele identity xID.
<UserJourney Id="CombinedSignInAndSignUp">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="X-IDExchange" />
</ClaimsProviderSelections>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="X-IDExchange" TechnicalProfileReferenceId="X-ID-OIDC" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="X-ID-Userdata" TechnicalProfileReferenceId="X-ID-Userdata" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- For social IDP authentication, attempt to find the user account in the directory. -->
<OrchestrationStep Order="4" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- Show self-asserted page only if the directory does not have the user account already (i.e. we do not have an objectId). -->
<OrchestrationStep Order="5" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SelfAsserted-Social" TechnicalProfileReferenceId="SelfAsserted-Social" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- The previous step (SelfAsserted-Social) could have been skipped if there were no attributes to collect
from the user. So, in that case, create the user in the directory if one does not already exist
(verified using objectId which would be set from the last step if account was created in the directory. -->
<OrchestrationStep Order="6" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AADUserWrite" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>
V rámci zásad se na podporu deklarací identity odkazuje xID. Deklarujete deklarace deklarací deklarací identity ve schématu deklarací identity. Element ClaimsSchema obsahuje seznam elementů ClaimType. Element ClaimType obsahuje atribut ID, což je název deklarace identity.
- Otevřete TrustFrameworksExtension.xml.
- Vyhledejte element BuildingBlocks .
- Do elementu ClaimsSchema zásad TrustFrameworksExtension.xml přidejte následující prvek ClaimType.
<BuildingBlocks>
<ClaimsSchema>
<!-- xID -->
<ClaimType Id="sid">
<DisplayName>sid</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="userdataid">
<DisplayName>userdataid</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="xid_verified">
<DisplayName>xid_verified</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
<ClaimType Id="email_verified">
<DisplayName>email_verified</DisplayName>
<DataType>boolean</DataType>
</ClaimType>
<ClaimType Id="identityProviderAccessToken">
<DisplayName>Identity Provider Access Token</DisplayName>
<DataType>string</DataType>
<AdminHelpText>Stores the access token of the identity provider.</AdminHelpText>
</ClaimType>
<ClaimType Id="last_name">
<DisplayName>last_name</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="first_name">
<DisplayName>first_name</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="previous_name">
<DisplayName>previous_name</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="year">
<DisplayName>year</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="month">
<DisplayName>month</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="date">
<DisplayName>date</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="prefecture">
<DisplayName>prefecture</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="city">
<DisplayName>city</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="address">
<DisplayName>address</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="sub_char_common_name">
<DisplayName>sub_char_common_name</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="sub_char_previous_name">
<DisplayName>sub_char_previous_name</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="sub_char_address">
<DisplayName>sub_char_address</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="verified_at">
<DisplayName>verified_at</DisplayName>
<DataType>int</DataType>
</ClaimType>
<ClaimType Id="gender">
<DisplayName>Gender</DisplayName>
<DataType>string</DataType>
<DefaultPartnerClaimTypes>
<Protocol Name="OpenIdConnect" PartnerClaimType="gender" />
</DefaultPartnerClaimTypes>
<AdminHelpText>The user's gender.</AdminHelpText>
<UserHelpText>Your gender.</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
<ClaimType Id="correlationId">
<DisplayName>correlation ID</DisplayName>
<DataType>string</DataType>
</ClaimType>
<!-- xID -->
</ClaimsSchema>
</BuildingBlocks>
Konfigurace zásad předávající strany
Zásady předávající strany, například SignUpSignIn.xml, určují cestu uživatele, Azure AD B2C provádí.
- V předávající straně vyhledejte element DefaultUserJourney .
- Aktualizujte Id reference tak, aby odpovídalo ID cesty uživatele, které jste přidali ke zprostředkovateli identity.
V následujícím příkladu je pro cestu uživatele xID nastaveno ReferenceId na CombinedSignInAndSignUp
hodnotu .
<RelyingParty>
<DefaultUserJourney ReferenceId="CombinedSignInAndSignUp" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
<OutputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
<OutputClaim ClaimTypeReferenceId="issuerUserId" />
<OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
<OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="last_name" />
<OutputClaim ClaimTypeReferenceId="previous_name" />
<OutputClaim ClaimTypeReferenceId="year" />
<OutputClaim ClaimTypeReferenceId="month" />
<OutputClaim ClaimTypeReferenceId="date" />
<OutputClaim ClaimTypeReferenceId="prefecture" />
<OutputClaim ClaimTypeReferenceId="city" />
<OutputClaim ClaimTypeReferenceId="address" />
<OutputClaim ClaimTypeReferenceId="sub_char_common_name" />
<OutputClaim ClaimTypeReferenceId="sub_char_previous_name" />
<OutputClaim ClaimTypeReferenceId="sub_char_address" />
<OutputClaim ClaimTypeReferenceId="gender" />
<OutputClaim ClaimTypeReferenceId="verified_at" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="sid" />
<OutputClaim ClaimTypeReferenceId="userdataid" />
<OutputClaim ClaimTypeReferenceId="xid_verified" />
<OutputClaim ClaimTypeReferenceId="email_verified" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
Nahrání vlastní zásady
Následující pokyny najdete v adresáři s tenantem Azure AD B2C.
- Přihlaste se k webu Azure Portal.
- Na panelu nástrojů portálu vyberte Adresáře a předplatná.
- V nastavení portálu | Na stránce Adresáře a předplatná v seznamu Název adresáře . vyhledejte adresář Azure AD B2C.
- Vyberte Přepnout.
- V Azure Portal vyhledejte a vyberte Azure AD B2C.
- V části Zásady vyberte Identity Experience Framework.
- Vyberte Nahrát vlastní zásady.
- Nahrajte soubory v následujícím pořadí:
- Základní soubor zásad:
TrustFrameworkBase.xml
- Zásady rozšíření:
TrustFrameworkExtensions.xml
- Zásady předávající strany:
SignUpSignIn.xml
Otestování vlastních zásad
- V tenantovi Azure AD B2C a v části Zásady vyberte Rozhraní prostředí identit.
- V části Vlastní zásady vyberte CustomSignUpSignIn.
- V části Aplikace vyberte webovou aplikaci, kterou jste zaregistrovali. Adresa URL odpovědi je
https://jwt.ms
. - Vyberte Spustit.
- Prohlížeč přesměruje na přihlašovací stránku xID.
- Prohlížeč přesměruje na
https://jwt.ms
. Zobrazí se obsah tokenu vrácený Azure AD B2C.