Share via


Een registratie- en aanmeldingsstroom instellen voor een lokaal account met behulp van aangepast Azure Active Directory B2C-beleid

In Een gebruikersaccount maken en lezen met behulp van het aangepaste azure Active Directory B2C-beleidsartikel , maakt een gebruiker een nieuw gebruikersaccount, maar meldt u zich niet aan.

In dit artikel leert u hoe u aangepast beleid voor Azure Active Directory B2C (Azure AD B2C) schrijft waarmee een gebruiker een lokaal Azure AD B2C-account kan maken of zich kan aanmelden bij een account. Een lokaal account verwijst naar een account dat is gemaakt in uw Azure AD B2C-tenant wanneer een gebruiker zich aanmeldt bij uw toepassing.

Overzicht

Azure AD B2C maakt gebruik van openID Verbinding maken verificatieprotocol om gebruikersreferenties te verifiëren. In Azure AD B2C verzendt u de gebruikersreferenties naast andere informatie naar een beveiligd eindpunt, dat vervolgens bepaalt of de referenties geldig zijn of niet. Als u de implementatie van OpenID Verbinding maken van Azure AD B2C gebruikt, kunt u aanmelding, aanmelding en andere identiteitsbeheerervaringen in uw webtoepassingen uitbesteden aan Microsoft Entra ID.

Aangepast Azure AD B2C-beleid biedt een OpenID Verbinding maken technisch profiel, dat u gebruikt om een aanroep naar een beveiligd Microsoft-eindpunt te maken. Meer informatie over OpenID Verbinding maken technisch profiel.

Vereisten

Notitie

Dit artikel maakt deel uit van de reeks instructies voor het maken en uitvoeren van uw eigen aangepaste beleidsregels in Azure Active Directory B2C. We raden u aan deze reeks te starten vanuit het eerste artikel.

Stap 1: OpenID Verbinding maken technisch profiel configureren

Als u een OpenID-Verbinding maken technisch profiel wilt configureren, moet u drie stappen uitvoeren:

  • Meer claims declareren.
  • Apps registreren in uw Azure-portal.
  • Ten slotte configureert u OpenID Verbinding maken Technisch profiel zelf

Stap 1.1: Meer claims declareren

Zoek in het ContosoCustomPolicy.XML bestand de sectie ClaimsSchema en voeg vervolgens meer claims toe met behulp van de volgende code:

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

Stap 1.2: Identity Experience Framework-toepassingen registreren

Voor Azure AD B2C moet u twee toepassingen registreren die worden gebruikt voor het registreren en aanmelden van gebruikers met lokale accounts: IdentityExperienceFramework, een web-API en ProxyIdentityExperienceFramework, een systeemeigen app met gedelegeerde machtigingen voor de IdentityExperienceFramework-app.

Als u dit nog niet hebt gedaan, registreert u de volgende toepassingen. Als u het onderstaande overzicht wilt automatiseren, gaat u naar de IEF-installatie-app en volgt u de instructies:

  1. Gebruik de stappen in De toepassing IdentityExperienceFramework registreren om de Identity Experience Framework-toepassing te registreren. Kopieer de toepassings-id (client), appID, voor de registratie van de Identity Experience Framework-toepassing voor gebruik in de volgende stap.

  2. Gebruik de stappen in De proxyIdentityExperienceFramework-toepassing registreren om de Proxy Identity Experience Framework-toepassing te registreren. Kopieer de toepassings-id (client), proxyAppID, voor de registratie van de proxy Identity Experience Framework-toepassing voor gebruik in de volgende stap.

Stap 1.3: OpenID configureren Verbinding maken technisch profiel

Zoek in het ContosoCustomPolicy.XML bestand de sectie ClaimsProviders en voeg vervolgens een claimproviderelement toe dat uw OpenID-Verbinding maken Technisch profiel bevat met behulp van de volgende code:

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

Vervang beide exemplaren van:

  • appID met toepassings-id (client) van de Identity Experience Framework-toepassing die u in stap 1.2 hebt gekopieerd.

  • proxyAppID met toepassings-id (client) van de Proxy Identity Experience Framework-toepassing die u in stap 1.2 hebt gekopieerd.

Stap 2: de gebruikersinterface voor aanmelden configureren

Wanneer uw beleid wordt uitgevoerd, moet de gebruiker een gebruikersinterface zien waarmee ze zich kunnen aanmelden. De gebruikersinterface heeft ook de mogelijkheid om zich te registreren als ze nog geen account hebben. Hiervoor moet u twee stappen uitvoeren:

  • Configureer een zelf-asserted technisch profiel, waarin het aanmeldingsformulier voor de gebruiker wordt weergegeven.
  • Inhoudsdefinitie configureren voor de gebruikersinterface voor aanmelden.

Stap 2.1: een technisch profiel voor de aanmeldingsgebruikersinterface configureren

Zoek in het ContosoCustomPolicy.XML bestand het SignInUser technische profiel en voeg een SelfAsserted Technical Profile toe nadat dit is uitgevoerd met behulp van de volgende code:

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

We hebben een selfAsserted technical profile, UserSignInCollector, toegevoegd, waarin het aanmeldingsformulier voor de gebruiker wordt weergegeven. We hebben het technische profiel geconfigureerd om het e-mailadres van de gebruiker te verzamelen als hun aanmeldingsnaam, zoals aangegeven in de setting.operatingMode metagegevens. Het aanmeldingsformulier bevat een registratiekoppeling, die de gebruiker naar een aanmeldingsformulier leidt, zoals aangegeven door de SignUpTarget metagegevens. U ziet hoe we de SignUpWithLogonEmailExchangeClaimsExchange hebben ingesteld in de indelingsstappen.

Daarnaast hebben we de SignInUser OpenID Verbinding maken Technical Profile toegevoegd als een ValidationTechnicalProfile. Het technische profiel SignInUser wordt dus uitgevoerd wanneer de gebruiker de knop Aanmelden selecteert (zie de schermafbeelding in stap 5).

In de volgende stap (stap 2.2) configureren we een inhoudsdefinitie die we in dit selfAsserted technical profiel gaan gebruiken.

Stap 2.2: definitie van de aanmeldingsinterface configureren

Zoek in het ContosoCustomPolicy.XML bestand de sectie ContentDefinitions en meld u vervolgens aan met behulp van de volgende code:

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

We hebben een inhoudsdefinitie geconfigureerd voor ons zelfbewuste technische profiel, SignupOrSigninContentDefinition. We kunnen het in het technische profiel opgeven met behulp van het metagegevenselement of opgeven wanneer we verwijzen naar het technische profiel in de indelingsstappen. Eerder hebben we geleerd hoe u een inhoudsdefinitie rechtstreeks in het zelfbeweertde technische profiel opgeeft. In dit artikel leert u hoe u deze kunt opgeven wanneer we verwijzen naar het technische profiel in de indelingsstappen, stap 3.

Stap 3: de indelingsstappen voor gebruikersbeleving bijwerken

Zoek in het ContosoCustomPolicy.XML bestand het gebruikerstraject HelloWorldJourney en vervang alle verzameling indelingsstappen door de volgende code:

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

In indelingsstappen twee tot vijf hebben we voorwaarden gebruikt om te bepalen of orchestrationstap moet worden uitgevoerd. We moeten bepalen of de gebruiker zich aanmeldt of zich registreert.

Wanneer het aangepaste beleid wordt uitgevoerd:

  • Indelingsstap 1 : geeft de aanmeldingspagina weer, zodat de gebruiker zich kan aanmelden of de koppeling Nu registreren kan selecteren. U ziet dat we de inhoudsdefinitie opgeven die wordt gebruikt door het zelf-asserted technische profiel userSignInCollector om het aanmeldingsformulier weer te geven.

  • Indelingsstap 2 : deze stap wordt uitgevoerd als de gebruiker zich registreert (objectId niet bestaat), dus geven we het selectieformulier voor het accounttype weer door het zelf-asserteerde technische profiel AccountTypeInputCollector aan te roepen.

  • Indelingsstap 3 : deze stap wordt uitgevoerd als de gebruiker zich registreert (objectId niet bestaat) en dat een gebruiker geen bedrijf accountTypeselecteert. Daarom moeten we de gebruiker vragen een accessCode invoer in te voeren door het zelf-asserted technische profiel AccessCodeInputCollector aan te roepen.

  • Indelingsstap 4 : deze stap wordt uitgevoerd als de gebruiker zich registreert (objectId bestaat niet), dus geven we het aanmeldingsformulier weer door het door self-asserted technische profiel userInformationCollector aan te roepen.

  • Indelingsstap 5 : in deze stap worden accountgegevens van Microsoft Entra-id gelezen (we roepen AAD-UserRead het technische profiel van Microsoft Entra ID aan), zodat deze wordt uitgevoerd of een gebruiker zich registreert of zich aanmeldt.

  • Indelingsstap 6 : met deze stap wordt het technische profiel UserInputMessageClaimGenerator aangeroepen om het begroetingsbericht van de gebruiker samen te stellen.

  • Indelingsstap 7 - Ten slotte wordt in stap 8 het JWT-token aan het einde van de uitvoering van het beleid samengesteld en geretourneerd.

Stap 4: Beleid uploaden

Volg de stappen in Het aangepaste beleidsbestand uploaden om uw beleidsbestand te uploaden. Als u een bestand met dezelfde naam uploadt als het bestand dat zich al in de portal bevindt, moet u het aangepaste beleid overschrijven selecteren als dit al bestaat.

Stap 5: Beleid testen

Volg de stappen in Het aangepaste beleid testen om uw aangepaste beleid te testen. Zodra het beleid is uitgevoerd, ziet u een interface die vergelijkbaar is met de onderstaande schermopname:

screenshot of sign-up or sign-in interface.

U kunt zich aanmelden door het e-mailadres en wachtwoord van een bestaand account in te voeren. Als u nog geen account hebt, moet u de koppeling Nu registreren selecteren om een nieuw gebruikersaccount te maken.

Volgende stappen