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

Důležité

Od 1. května 2025 už nebude Azure AD B2C k dispozici k nákupu pro nové zákazníky. Další informace najdete v našich nejčastějších dotazech.

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 používá ověřovací protokol OpenID Connect k ověření přihlašovacích údajů uživatele. 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 Connect služby Azure AD B2C, můžete outsourcovat registraci, přihlášení a další funkce pro správu identit ve vašich webových aplikacích službě Microsoft Entra ID.

Vlastní zásady Azure AD B2C poskytují technický profil OpenID Connect, 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 Connect.

Požadavky

Poznámka:

Tento článek je součástí série návodů "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 technického profilu OpenID Connect

Pokud chcete nakonfigurovat technický profil OpenID Connect, musíte provést tři kroky:

  • Prohlašte více nároků.
  • Zaregistrujte aplikace na webu Azure Portal.
  • Nakonec nakonfigurujte samotný technický profil OpenID Connect.

Krok 1.1 – Prohlášení dalších nároků

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. Chcete-li níže uvedený průvodce automatizovat, navštivte IEF Setup App 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 technického profilu OpenID Connect

ContosoCustomPolicy.XML V souboru vyhledejte oddíl ClaimsProviders a pak přidejte element zprostředkovatele deklarací, který obsahuje váš technický profil OpenID Connect 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 oba výskyty:

  • 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 potvrzením, 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é technický profil SignInUser OpenID Connect jako soubor ValidationTechnicalProfile. 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 obsahovou definici pro náš samostatně ověřený technický profil SignupOrSigninContentDefinition. 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í deklarací, proto v tomto článku se dozvíme, jak ji určit, když v krocích orkestrace, konkrétně 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 druhém až pátém kroku orchestrace jsme použili předběžné podmínky k určení, zda má být krok orchestrace spuštěn. Musíme určit, jestli se uživatel přihlašuje nebo zaregistruje.

Když se spustí vlastní zásada:

  • 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 technický profil UserSignInCollector využí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 nevybere společnost accountType. Proto musíme uživatele požádat, aby zadal accessCode vyvoláním technického profilu s vlastním prohlášením AccessCodeInputCollector.

  • Orchestration Step 4 – Tento krok se spustí, pokud se uživatel zaregistruje (objectId neexistuje), proto 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í.

  • Orchestration Step 6 – Tento krok vyvolá technický nástroj UserInputMessageClaimGenerator pro sestavení pozdravu uživatele.

  • Orchestrace – Krok 7 – Nakonec, krok 8 sestaví a vrátí JWT na konci provádění zásad.

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 Přepsat vlastní zásady, pokud už existují.

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í pravidla uvidíte rozhraní podobné snímku obrazovky níže.

snímek obrazovky s registračním nebo přihlašovacím rozhraním

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.