Napisz swoje pierwsze zasady niestandardowe usługi Azure Active Directory B2C — Hello World!

W aplikacji możesz użyć przepływów użytkownika, które umożliwiają użytkownikom tworzenie kont, logowanie się lub zarządzanie ich profilem. Gdy przepływy użytkowników nie obejmują wszystkich potrzeb biznesowych, możesz użyć zasad niestandardowych.

Chociaż możesz użyć wstępnie utworzonego pakietu początkowego zasad niestandardowych do pisania zasad niestandardowych, ważne jest, aby zrozumieć, jak są tworzone zasady niestandardowe. Z tego artykułu dowiesz się, jak utworzyć pierwsze zasady niestandardowe od podstaw.

Wymagania wstępne

Uwaga

Ten artykuł jest częścią serii Instrukcje tworzenia i uruchamiania własnych zasad niestandardowych w usłudze Azure Active Directory B2C. Zalecamy rozpoczęcie tej serii od pierwszego artykułu.

Krok 1. Konfigurowanie kluczy podpisywania i szyfrowania

Jeśli jeszcze tego nie zrobiono, utwórz następujące klucze szyfrowania. Aby zautomatyzować poniższy przewodnik, odwiedź aplikację konfiguracji IEF i postępuj zgodnie z instrukcjami:

  1. Wykonaj kroki opisane w temacie Dodawanie kluczy podpisywania i szyfrowania dla aplikacji platformy Identity Experience Framework, aby utworzyć klucz podpisywania.

  2. Aby utworzyć klucz szyfrowania, wykonaj kroki opisane w temacie Dodawanie kluczy podpisywania i szyfrowania dla aplikacji platformy Identity Experience Framework.

Krok 2. Kompilowanie niestandardowego pliku zasad

  1. W programie VS Code utwórz i otwórz plik ContosoCustomPolicy.XML.

  2. ContosoCustomPolicy.XML W pliku dodaj następujący kod:

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <TrustFrameworkPolicy
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
          PolicySchemaVersion="0.3.0.0"
          TenantId="yourtenant.onmicrosoft.com"
          PolicyId="B2C_1A_ContosoCustomPolicy"
          PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
    
            <BuildingBlocks>
                <!-- Building Blocks Here-->
            </BuildingBlocks>
    
            <ClaimsProviders>
                <!-- Claims Providers Here-->
            </ClaimsProviders>
    
            <UserJourneys>
                <!-- User Journeys Here-->
            </UserJourneys>
    
            <RelyingParty>
                <!-- 
                    Relying Party Here that's your policy’s entry point
                    Specify the User Journey to execute 
                    Specify the claims to include in the token that is returned when the policy runs
                -->
            </RelyingParty>
        </TrustFrameworkPolicy>
    
    

    Zastąp yourtenant ciąg częścią poddomeny nazwy dzierżawy, taką jak contoso. Dowiedz się, jak uzyskać nazwę dzierżawy.

    Elementy XML definiują element najwyższego poziomu TrustFrameworkPolicy pliku zasad z jego identyfikatorem zasad i nazwą dzierżawy. Element TrustFrameworkPolicy zawiera inne elementy XML, które będą używane w tej serii.

  3. Aby zadeklarować oświadczenie, dodaj następujący kod w BuildingBlocks sekcji ContosoCustomPolicy.XML pliku:

      <ClaimsSchema>
        <ClaimType Id="objectId">
            <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
            <DataType>string</DataType>
        </ClaimType>        
        <ClaimType Id="message">
            <DisplayName>Will hold Hello World message</DisplayName>
            <DataType>string</DataType>
        </ClaimType>
      </ClaimsSchema>
    

    Oświadczenie jest jak zmienna. Deklaracja oświadczenia pokazuje również typ danych oświadczenia.

  4. ClaimsProviders W sekcji ContosoCustomPolicy.XML pliku dodaj następujący kod:

        <ClaimsProvider>
          <DisplayName>Token Issuer</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="JwtIssuer">
              <DisplayName>JWT Issuer</DisplayName>
              <Protocol Name="None" />
              <OutputTokenFormat>JWT</OutputTokenFormat>
              <Metadata>
                <Item Key="client_id">{service:te}</Item>
                <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
              </Metadata>
              <CryptographicKeys>
                <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
                <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" />
              </CryptographicKeys>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    
        <ClaimsProvider>
          <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. -->
          <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
              <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
              <Protocol Name="None" />
              <Metadata>
                <Item Key="url">{service:te}</Item>
              </Metadata>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    

    Zadeklarowaliśmy wystawcę tokenu JWT. CryptographicKeys Jeśli w sekcji użyto różnych nazw do skonfigurowania kluczy podpisywania i szyfrowania w kroku 1, upewnij się, że używasz poprawnej wartości dla .StorageReferenceId

  5. UserJourneys W sekcji ContosoCustomPolicy.XML pliku dodaj następujący kod:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    Dodaliśmy element UserJourney. Podróż użytkownika określa logikę biznesową, przez która użytkownik końcowy przechodzi, gdy usługa Azure AD B2C przetwarza żądanie. Ta podróż użytkownika ma tylko jeden krok, który wystawia token JTW z oświadczeniami, które zdefiniujesz w następnym kroku.

  6. RelyingParty W sekcji ContosoCustomPolicy.XML pliku dodaj następujący kod:

      <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
      <TechnicalProfile Id="HelloWorldPolicyProfile">
        <DisplayName>Hello World Policy Profile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
          <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    

    Sekcja RelyingParty to punkt wejścia do zasad. Określa userJourney do wykonania i oświadczenia, które mają zostać uwzględnione w tokenie zwracanym po uruchomieniu zasad.

Po wykonaniu kroku 2ContosoCustomPolicy.XML plik powinien wyglądać podobnie do następującego kodu:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
        <BuildingBlocks>
            <ClaimsSchema>
            <ClaimType Id="objectId">
                <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
                <DataType>string</DataType>
            </ClaimType>        
            <ClaimType Id="message">
                <DisplayName>Will hold Hello World message</DisplayName>
                <DataType>string</DataType>
            </ClaimType>
            </ClaimsSchema>
        </BuildingBlocks>
        <ClaimsProviders><!--Claims Providers Here-->
            <ClaimsProvider>
                <DisplayName>Token Issuer</DisplayName>
                <TechnicalProfiles>
                    <TechnicalProfile Id="JwtIssuer">
                        <DisplayName>JWT Issuer</DisplayName>
                        <Protocol Name="None"/>
                        <OutputTokenFormat>JWT</OutputTokenFormat>
                        <Metadata>
                            <Item Key="client_id">{service:te}</Item>
                            <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                            <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
                        </Metadata>
                        <CryptographicKeys>
                            <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
                            <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
                        </CryptographicKeys>
                    </TechnicalProfile>
                </TechnicalProfiles>
            </ClaimsProvider>
    
            <ClaimsProvider>
            <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
                <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
                <Protocol Name="None" />
                <Metadata>
                    <Item Key="url">{service:te}</Item>
                </Metadata>
                </TechnicalProfile>
            </TechnicalProfiles>
            </ClaimsProvider>
        </ClaimsProviders>
      <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
          </OrchestrationSteps>
        </UserJourney>
      </UserJourneys>
        <RelyingParty><!-- 
                Relying Party Here that's your policy’s entry point
                Specify the User Journey to execute 
                Specify the claims to include in the token that is returned when the policy runs
            -->
            <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
            <TechnicalProfile Id="HelloWorldPolicyProfile">
                <DisplayName>Hello World Policy Profile</DisplayName>
                <Protocol Name="OpenIdConnect"/>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
                    <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
                </OutputClaims>
                <SubjectNamingInfo ClaimType="sub"/>
            </TechnicalProfile>
        </RelyingParty>
    </TrustFrameworkPolicy>

Krok 3. Przekazywanie pliku zasad niestandardowych

  1. Zaloguj się w witrynie Azure Portal.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
  4. W menu po lewej stronie w obszarze Zasady wybierz pozycję Identity Experience Framework.
  5. Wybierz pozycję Przekaż zasady niestandardowe, przeglądaj, a następnie przekaż ContosoCustomPolicy.XML plik.

Po przekazaniu pliku usługa Azure AD B2C dodaje prefiks B2C_1A_, więc nazwy wyglądają podobnie do B2C_1A_CONTOSOCUSTOMPOLICY.

Krok 4. Testowanie zasad niestandardowych

  1. W obszarze Zasady niestandardowe wybierz pozycję B2C_1A_CONTOSOCUSTOMPOLICY.
  2. W obszarze Wybierz aplikację na stronie przeglądu zasad niestandardowych wybierz aplikację internetową, taką jak aplikacja internetowa1 , która została wcześniej zarejestrowana. Upewnij się, że ustawionohttps://jwt.ms wartość Wybierz adres URL odpowiedzi.
  3. Wybierz przycisk Uruchom teraz .

Po zakończeniu wykonywania zasad nastąpi przekierowanie do https://jwt.mselementu i zostanie wyświetlony zdekodowany token JWT. Wygląda podobnie do następującego fragmentu kodu tokenu JWT:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

Zwróć uwagę na message oświadczenia i sub , które ustawiamy jako oświadczenia wyjściowe w RelyingParty sekcji .

Następne kroki

W tym artykule przedstawiono i użyto czterech sekcji, które zostały uwzględnione w zasadach niestandardowych usługi Azure AD B2C. Te sekcje są dodawane jako elementy podrzędne TrustFrameworkPolicy elementu głównego:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

Następnie dowiedz się: