Share via


Konfigurera xID med Azure Active Directory B2C för lösenordslös autentisering

I den här självstudien lär du dig att integrera Azure Active Directory B2C-autentisering (Azure AD B2C) med XID Digital ID-lösningen. XID-appen ger användarna lösenordslös, säker multifaktorautentisering. Kortet Mitt nummer, det digitala ID-kort som utfärdats av den japanska regeringen, verifierar xID-autentiserade användaridentiteter. För sina användare kan organisationer få verifierad personlig identifieringsinformation (kundinnehåll) via xID-API:et. Dessutom genererar xID-appen en privat nyckel i ett säkert område på mobila användarenheter, vilket gör dem till digitala signeringsenheter.

Förutsättningar

Scenariobeskrivning

Följande diagram visar arkitekturen.

Diagram över xID-arkitekturen.

  1. På Azure AD B2C-inloggningssidan loggar användaren in eller registrerar sig.
  2. Azure AD B2C omdirigerar användaren till xID-auktorisera API-slutpunkt med en OpenID Connect-begäran (OIDC). En OIDC-slutpunkt har slutpunktsinformation. xID-identitetsprovidern (IdP) omdirigerar användaren till inloggningssidan för xID-auktorisering. Användaren anger e-postadress.
  3. xID IdP skickar push-meddelanden till användarens mobila enhet.
  4. Användaren öppnar xID-appen, kontrollerar begäran, anger en PIN-kod eller använder biometri. xID-appen aktiverar den privata nyckeln och skapar en elektronisk signatur.
  5. xID-appen skickar signaturen till xID IdP för verifiering.
  6. En medgivandeskärm visas för att ge personlig information till tjänsten.
  7. xID IdP returnerar OAuth-auktoriseringskoden till Azure AD B2C.
  8. Azure AD B2C skickar en tokenbegäran med hjälp av auktoriseringskoden.
  9. xID IdP kontrollerar tokenbegäran. Om det är giltigt returneras OAuth-åtkomsttoken och ID-token med användaridentifierare och e-postadress.
  10. Om användarkundinnehåll behövs anropar Azure AD B2C xID-användardata-API:et.
  11. XID-användardata-API:et returnerar krypterat kundinnehåll. Användare dekrypterar med en privat nyckel som skapas när de begär xID-klientinformation.
  12. Användaren beviljas eller nekas åtkomst till kundprogrammet.

Installera xID

  1. Om du vill begära API-dokument fyller du i formuläret för begäran. Gå till Kontakta oss.
  2. I meddelandet anger du att du använder Azure AD B2C.
  3. En xID-säljare kontaktar dig.
  4. Följ anvisningarna i xID API-dokumentet.
  5. Begär en xID API-klient.
  6. xID-teknikteamet skickar klientinformation till dig inom 3–4 arbetsdagar.
  7. Ange en omdirigerings-URI på webbplatsen med hjälp av följande mönster. Användarna återgår till den efter autentisering.

https://<your-b2c-domain>.b2clogin.com/<your-b2c-domain>.onmicrosoft.com/oauth2/authresp

Registrera ett webbprogram i Azure AD B2C

Registrera program i en klientorganisation som du hanterar och sedan interagera med Azure AD B2C.

Läs mer: Programtyper som kan användas i Active Directory B2C

För testning registrerar https://jwt.msdu , ett Microsoft-webbprogram med avkodat tokeninnehåll, som inte lämnar webbläsaren.

Registrera ett webbprogram och aktivera implicit beviljande av ID-token

Fullständig självstudie: Registrera ett webbprogram i Azure AD B2C

Skapa en xID-principnyckel

Lagra klienthemligheten från xID i din Azure AD B2C-klientorganisation. Använd katalogen med Azure AD B2C-klientorganisationen för följande instruktioner.

  1. Logga in på Azure-portalen.
  2. I portalens verktygsfält väljer du Kataloger + prenumerationer.
  3. I portalinställningarna | På sidan Kataloger + prenumerationer letar du upp din Azure AD B2C-katalog i listan Katalognamn.
  4. Välj Växla.
  5. I det övre vänstra hörnet i Azure Portal väljer du Alla tjänster.
  6. Sök efter och välj Azure AD B2C.
  7. I Översikt väljer du Identity Experience Framework.
  8. Välj Principnycklar.
  9. Välj Lägg till.
  10. För Alternativ väljer du Manuell.
  11. Ange en principnyckel Namn för principnyckeln. Prefixet B2C_1A_ läggs till i nyckelnamnet.
  12. I Hemlig anger du klienthemligheten från xID.
  13. För Nyckelanvändning väljer du Signatur.
  14. Välj Skapa.

Anteckning

I Azure AD B2C är anpassade principer för komplexa scenarier.

Se Översikt över användarflöden och anpassade principer.

Konfigurera xID som identitetsprovider

För att användare ska kunna logga in med xID gör du xID till en anspråksprovider som Azure AD B2C kommunicerar med via en slutpunkt. Slutpunkten innehåller anspråk Azure AD B2C använder för att verifiera användare som autentiseras med digital identitet på sin enhet.

Lägga till xID som anspråksprovider

Hämta startpaketen för anpassad princip från GitHub och uppdatera sedan XML-filerna i Startpaketet för SocialAccounts med ditt Azure AD B2C-klientnamn.

  1. Ladda ned zip-filen active-directory-b2c-policy-starterpack-main eller klona lagringsplatsen. Se Azure-Samples/active-directory-b2c-custom-policy-starterpack.

  2. I filerna i katalogen SocialAccounts ersätter du strängen yourtenant med namnet på din Azure AD B2C-klientorganisation. Blir till exempel yourtenant.onmicrosoft.comcontoso.onmicrosoft.com.

  3. Öppna SocialAccounts/TrustFrameworkExtensions.xml.

  4. Hitta elementet ClaimsProviders . Om det inte finns någon lägger du till den under rotelementet.

  5. Lägg till en ny ClaimsProvider som liknar följande exempel:

    
     <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>
    
    
  6. Ange client_id med ditt xID-program-ID.

  7. Välj Spara.

Lägga till en användarresa

Lägg till en identitetsprovider på inloggningssidorna.

  1. Om du har en anpassad användarresa går du till Lägg till identitetsprovidern till en användarresa. Annars skapar du en dubblett av en mallanvändarresa:
  2. Öppna TrustFrameworkBase.xmlfrån startpaketet.
  3. Leta upp och kopiera innehållet i elementet UserJourneys som innehåller ID=SignUpOrSignIn.
  4. Öppna TrustFrameworkExtensions.xml och leta upp elementet UserJourneys. Om det inte finns någon lägger du till en.
  5. Klistra in innehållet i elementet UserJourney som underordnad elementet UserJourneys.
  6. Byt namn på användarens rese-ID. Till exempel ID=CustomSignUpSignIn

Lägga till identitetsprovidern i en användarresa

Lägg till den nya identitetsprovidern i användarresan.

  1. Leta upp orkestreringsstegelementet med Type=CombinedSignInAndSignUp, eller Type=ClaimsProviderSelection i användarresan. Det är vanligtvis det första orkestreringssteget. Elementet ClaimsProviderSelections har en identitetsproviderlista för inloggning. Ordningen på elementen styr ordningen på inloggningsknapparna.
  2. Lägg till xml-elementet ClaimsProviderSelection .
  3. Ange värdet för TargetClaimsExchangeId till ett eget namn.
  4. Lägg till elementet ClaimsExchange .
  5. Ange ID :t till värdet för målanspråkens utbytes-ID. Den här ändringen länkar xID-knappen till X-IDExchange åtgärden.
  6. Uppdatera värdet TechnicalProfileReferenceId till det tekniska profil-ID som du skapade (X-ID-OIDC).
  7. Lägg till ett orchestration-steg för att anropa xID UserInfo-slutpunkten för att returnera anspråk om den autentiserade användaren X-ID-Userdata.

Följande XML visar orkestrering av användarens resa med xID-identitetsprovidern.


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

Det finns identitetsanspråk som xID har stöd för som en del av principen. Anspråksschemat är där du deklarerar anspråken. Elementet ClaimsSchema har en ClaimType-elementlista. Elementet ClaimType innehåller ID-attributet, som är anspråksnamnet.

  1. Öppna TrustFrameworksExtension.xml.
  2. Leta upp elementet BuildingBlocks .
  3. Lägg till följande ClaimType-element i elementet ClaimsSchema i TrustFrameworksExtension.xml-principen
 <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>

Konfigurera principen för förlitande part

Principen för förlitande part, till exempel SignUpSignIn.xml, anger användarens resa Azure AD B2C körs.

  1. Leta upp elementet DefaultUserJourney i den förlitande parten.
  2. Uppdatera ReferenceId så att det matchar användarresans ID som du lade till i identitetsprovidern.

I följande exempel för xID-användarresan är ReferenceId inställt på CombinedSignInAndSignUp.

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

Ladda upp den anpassade principen

Använd katalogen med Azure AD B2C-klientorganisationen för följande instruktioner.

  1. Logga in på Azure-portalen.
  2. I portalens verktygsfält väljer du Kataloger + prenumerationer.
  3. I portalinställningarna | Sidan Kataloger + prenumerationer i listan Katalognamn . leta reda på din Azure AD B2C-katalog.
  4. Välj Växla.
  5. I Azure Portal söker du efter och väljer Azure AD B2C.
  6. Under Principer väljer du Identity Experience Framework.
  7. Välj Överför anpassad princip.
  8. Ladda upp filerna i följande ordning:
  • Grundläggande principfil: TrustFrameworkBase.xml
  • Tilläggsprincip: TrustFrameworkExtensions.xml
  • Princip för förlitande part: SignUpSignIn.xml

Testa den anpassade principen

  1. I din Azure AD B2C-klientorganisation och under Principer väljer du Identity Experience Framework.
  2. Under Anpassade principer väljer du CustomSignUpSignIn.
  3. För Program väljer du det webbprogram som du registrerade. Svars-URL:en är https://jwt.ms.
  4. Välj Kör nu.
  5. Webbläsaren omdirigeras till inloggningssidan för xID.
  6. Webbläsaren omdirigeras till https://jwt.ms. Tokeninnehållet som returneras av Azure AD B2C visas.

Nästa steg