Sdílet prostřednictvím


Nastavení toku registrace a přihlašování pro místní účet pomocí vlastních zásad Azure Active Directory B2C

V článku Vytvoření a čtení uživatelského účtu pomocí vlastní zásady Azure Active Directory B2C vytvoří uživatel nový uživatelský účet, ale nepřihlásí se k němu.

V tomto článku se dozvíte, jak napsat vlastní zásadu Azure Active Directory B2C (Azure AD B2C), která uživateli umožňuje vytvořit místní účet Azure AD B2C nebo se k jednomu účtu přihlásit. Místní účet odkazuje na účet vytvořený ve vašem tenantovi Azure AD B2C, když se uživatel zaregistruje do vaší aplikace.

Přehled

Azure AD B2C k ověření přihlašovacích údajů uživatele používá ověřovací protokol OpenID Připojení. V Azure AD B2C odešlete přihlašovací údaje uživatele spolu s dalšími informacemi do zabezpečeného koncového bodu, který pak určí, jestli jsou přihlašovací údaje platné nebo ne. Když použijete implementaci OpenID služby Azure AD B2C Připojení, můžete ve webových aplikacích pomocí Microsoft Entra ID provést registraci, přihlášení a další prostředí pro správu identit v Azure AD B2C.

Vlastní zásady Azure AD B2C poskytují technický profil OpenID Připojení, který používáte k volání zabezpečeného koncového bodu Microsoftu. Přečtěte si další informace o technickém profilu OpenID Připojení.

Předpoklady

Poznámka:

Tento článek je součástí řady s návody k vytvoření a spuštění vlastních zásad v Azure Active Directory B2C. Doporučujeme spustit tuto řadu z prvního článku.

Krok 1 : Konfigurace openID Připojení technického profilu

Pokud chcete nakonfigurovat openID Připojení technický profil, musíte provést tři kroky:

  • Deklarujte další deklarace identity.
  • Zaregistrujte aplikace na webu Azure Portal.
  • Nakonec nakonfigurujte samotný technický profil OpenID Připojení.

Krok 1.1 – Deklarace dalších deklarací identity

ContosoCustomPolicy.XML V souboru vyhledejte oddíl ClaimsSchema a pak přidejte další deklarace identity pomocí následujícího kódu:

    <!--<ClaimsSchema>-->
        ...
        <ClaimType Id="grant_type">
            <DisplayName>grant_type</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="scope">
            <DisplayName>scope</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="nca">
            <DisplayName>nca</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="client_id">
            <DisplayName>client_id</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
            <UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="resource_id">
            <DisplayName>resource_id</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
            <UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
        </ClaimType>
    <!--</ClaimsSchema>-->

Krok 1.2 – Registrace aplikací rozhraní Identity Experience Framework

Azure AD B2C vyžaduje registraci dvou aplikací, které používá k registraci a přihlašování uživatelů pomocí místních účtů: IdentityExperienceFramework, webového rozhraní API a ProxyIdentityExperienceFramework, nativní aplikace s delegovaným oprávněním k aplikaci IdentityExperienceFramework.

Pokud jste to ještě neudělali, zaregistrujte následující aplikace. Pokud chcete průvodce automatizovat níže, navštivte instalační aplikaci IEF a postupujte podle pokynů:

  1. Pomocí kroků v části Registrace aplikace IdentityExperienceFramework zaregistrujte aplikaci Identity Experience Framework. Zkopírujte ID aplikace (klienta), appID pro registraci aplikace Identity Experience Framework pro použití v dalším kroku.

  2. Pomocí kroků v registraci aplikace ProxyIdentityExperienceFramework zaregistrujte aplikaci Proxy Identity Experience Framework. Zkopírujte ID aplikace (klienta), proxyAppID pro registraci aplikace rozhraní Proxy Identity Experience Framework pro použití v dalším kroku.

Krok 1.3 – Konfigurace Připojení technického profilu OpenID

ContosoCustomPolicy.XML V souboru vyhledejte oddíl ClaimsProviders a pak přidejte element zprostředkovatele deklarací, který obsahuje openID Připojení technický profil pomocí následujícího kódu:

    <!--<ClaimsProviders>-->
        ...
        <ClaimsProvider>
            <DisplayName>OpenID Connect Technical Profiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="SignInUser">
                    <DisplayName>Sign in with Local Account</DisplayName>
                    <Protocol Name="OpenIdConnect" />
                    <Metadata>
                        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We didn't find this account</Item>
                        <Item Key="UserMessageIfInvalidPassword">Your password or username is incorrect</Item>
                        <Item Key="UserMessageIfOldPasswordUsed">You've used an old password.</Item>
                        <Item Key="ProviderName">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>
                        <!-- Policy Engine Clients -->
                        <Item Key="UsePolicyInRedirectUri">false</Item>
                        <Item Key="HttpBinding">POST</Item>
                        <Item Key="client_id">proxyAppID</Item>
                        <Item Key="IdTokenAudience">appID</Item>
                    </Metadata>
                    <InputClaims>
                        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="username" Required="true" />
                        <InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" Required="true" />
                        <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" />
                        <InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" />
                        <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" />
                        <InputClaim ClaimTypeReferenceId="client_id" DefaultValue="proxyAppID" />
                        <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="appID" />
                    </InputClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" />
                    </OutputClaims>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>
    <!--</ClaimsProviders>-->

Nahraďte obě instance:

  • appID s ID aplikace (klienta) aplikace Identity Experience Framework, kterou jste zkopírovali v kroku 1.2.

  • proxyAppID s ID aplikace (klienta) aplikace Proxy Identity Experience Framework, kterou jste zkopírovali v kroku 1.2.

Krok 2 – Konfigurace uživatelského rozhraní pro přihlášení

Když se zásady spustí, musí se uživateli zobrazit uživatelské rozhraní, které mu umožní přihlásit se. Uživatelské rozhraní má také možnost se zaregistrovat, pokud ještě nemá účet. K tomu je potřeba provést dva kroky:

  • Nakonfigurujte technický profil s vlastním kontrolním výrazem, který uživateli zobrazí přihlašovací formulář.
  • Nakonfigurujte definici obsahu pro uživatelské rozhraní přihlašování.

Krok 2.1 – Konfigurace technického profilu uživatelského rozhraní přihlašování

ContosoCustomPolicy.XML V souboru vyhledejte SignInUser technický profil a přidejte za něj technický profil SelfAsserted pomocí následujícího kódu:

    <TechnicalProfile Id="UserSignInCollector">
        <DisplayName>Local Account Signin</DisplayName>
        <Protocol Name="Proprietary"
            Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
            <Item Key="setting.operatingMode">Email</Item>
            <Item Key="SignUpTarget">AccountTypeInputCollectorClaimsExchange</Item>
        </Metadata>
        <DisplayClaims>
            <DisplayClaim ClaimTypeReferenceId="email" Required="true" />
            <DisplayClaim ClaimTypeReferenceId="password" Required="true" />
        </DisplayClaims>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="email" />
            <OutputClaim ClaimTypeReferenceId="password"  />
            <OutputClaim ClaimTypeReferenceId="objectId" />
        </OutputClaims>
        <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="SignInUser" />
        </ValidationTechnicalProfiles>
    </TechnicalProfile>

Přidali jsme technický profil SelfAsserted UserSignInCollector, který uživateli zobrazí přihlašovací formulář. Nakonfigurovali jsme technický profil tak, aby shromažďoval e-mailovou adresu uživatele jako přihlašovací jméno, jak je uvedeno v setting.operatingMode metadatech. Přihlašovací formulář obsahuje odkaz pro registraci, který vede uživatele k registračnímu formuláři, jak je uvedeno v SignUpTarget metadatech. V krocích orchestrace uvidíte, jak jsme nastavili SignUpWithLogonEmailExchangeClaimsExchange .

Přidali jsme také OpenID signInUser Připojení Technical Profile jako ověřovacíProfile. Technický profil SignInUser se tedy spustí, když uživatel vybere tlačítko Přihlásit se (viz snímek obrazovky v kroku 5).

V dalším kroku (krok 2.2) nakonfigurujeme definici obsahu, kterou použijeme v tomto technickém profilu SelfAsserted.

Krok 2.2 – Konfigurace definice obsahu rozhraní přihlašování

ContosoCustomPolicy.XML V souboru vyhledejte oddíl ContentDefinitions a pak pomocí následujícího kódu přihlaste definici obsahu:

    <!--<ContentDefinitions>-->
        ...
            <ContentDefinition Id="SignupOrSigninContentDefinition">
                <LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</LoadUri>
                <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
                <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.7</DataUri>
                <Metadata>
                    <Item Key="DisplayName">Signin and Signup</Item>
                </Metadata>
            </ContentDefinition>
    <!--</ContentDefinitions>-->

Nakonfigurovali jsme definici obsahu pro náš technický profil SignupOrSigninContentDefinitions vlastním uplatněním. Můžeme ho zadat v technickém profilu pomocí prvku metadat nebo ho určit, když v krocích orchestrace odkazujeme na technický profil. Dříve jsme se dozvěděli, jak určit definici obsahu přímo v technickém profilu s vlastním kontrolním výrazem, takže v tomto článku se dozvíme, jak ji určit, když v krocích orchestrace v kroku 3 odkazujeme na technický profil.

Krok 3 – aktualizace kroků orchestrace cesty uživatele

ContosoCustomPolicy.XML V souboru vyhledejte cestu uživatele HelloWorldJourney a nahraďte celou kolekci kroků orchestrace následujícím kódem:

    <!--<OrchestrationSteps>-->
        ...
        <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="SignupOrSigninContentDefinition">
            <ClaimsProviderSelections>
                <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
            </ClaimsProviderSelections>
            <ClaimsExchanges>
                <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="UserSignInCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="2" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/>
            </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="3" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
                <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                  <Value>accountType</Value>
                  <Value>company</Value>
                  <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>
        
        <OrchestrationStep Order="4" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="UserInformationCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>  
      
        <OrchestrationStep Order="5" Type="ClaimsExchange">
            <ClaimsExchanges>
            <ClaimsExchange Id="AADUserReaderExchange" TechnicalProfileReferenceId="AAD-UserRead"/>
            </ClaimsExchanges>
        </OrchestrationStep>                
        
        <OrchestrationStep Order="6" Type="ClaimsExchange">
            <ClaimsExchanges>
            <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="UserInputMessageClaimGenerator"/>
            </ClaimsExchanges>          
        </OrchestrationStep>                
        
        <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    <!--</OrchestrationSteps>-->

Ve dvou až pěti krocích orchestrace jsme použili předběžné podmínky k určení, jestli se má spustit krok orchestrace. Musíme určit, jestli se uživatel přihlašuje nebo zaregistruje.

Při spuštění vlastních zásad:

  • Orchestrace – krok 1 – zobrazí přihlašovací stránku, aby se uživatel mohl přihlásit nebo vybrat odkaz Pro registraci . Všimněte si, že zadáváme definici obsahu, kterou používá technický profil UserSignInCollector , který používá k zobrazení přihlašovacího formuláře.

  • Orchestrace Krok 2 – Tento krok se spustí, pokud se uživatel zaregistruje (objectId neexistuje), takže zobrazíme formulář pro výběr typu účtu vyvoláním technického profilu AccountTypeInputCollector .

  • Orchestrace Krok 3 – Tento krok se spustí, pokud se uživatel zaregistruje (objectId neexistuje) a že uživatel nevybere společnost accountType. Proto musíme uživatele požádat, aby zadal přístupový accessCode profil vyvoláním accessCodeInputCollectoru s vlastním kontrolním technickým profilem.

  • Orchestraation Step 4 – Tento krok se spustí, pokud se uživatel zaregistruje (objectId neexistuje), takže zobrazíme registrační formulář vyvoláním technického profilu UserInformationCollector .

  • Orchestration Step 5 – Tento krok čte informace o účtu z Microsoft Entra ID (vyvoláme AAD-UserRead technický profil Microsoft Entra ID), takže se spustí bez ohledu na to, jestli se uživatel zaregistruje nebo přihlásí.

  • Orchestraation Step 6 – Tento krok vyvolá technický profil UserInputMessageClaimGenerator pro sestavení pozdravu uživatele.

  • Orchestrace – Krok 7 – Nakonec, krok 8 sestaví a vrátí token JWT na konci spuštění zásady.

Krok 4 – Nahrání zásad

Postupujte podle kroků v části Nahrání souboru vlastních zásad a nahrajte soubor zásad. Pokud nahráváte soubor se stejným názvem jako soubor, který už je na portálu, nezapomeňte vybrat Možnost Přepsat vlastní zásadu, pokud už existuje.

Krok 5 – Testovací zásady

Postupujte podle kroků v části Otestování vlastních zásad a otestujte vlastní zásady. Po spuštění zásady uvidíte rozhraní podobné následujícímu snímku obrazovky:

screenshot of sign-up or sign-in interface.

Můžete se přihlásit zadáním e-mailové adresy a hesla existujícího účtu. Pokud ještě účet nemáte, musíte vybrat odkaz Pro registraci a vytvořit nový uživatelský účet.

Další kroky