Sdílet prostřednictvím


Konfigurace zabezpečení přenosu pomocí Azure Active Directory B2C pro prevenci podvodů

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 tomto kurzu se naučíte integrovat ověřování Azure Active Directory B2C (Azure AD B2C) s využitím služby DRS (Transmit Security Detection and Response Services). Transmit Security umožňuje detekovat riziko v interakcích zákazníků s digitálními komunikačními kanály a umožnit informovaná rozhodnutí o totožnosti a důvěryhodnosti v rámci spotřebitelského prožitku.

Tato funkce je dostupná pouze pro vlastní zásady. Ve krocích nastavení vyberte vlastní politika v předchozím výběru.

Popis scénáře

Integrace detekce přenosu a odezvy zahrnuje následující komponenty:

  • Tenant Azure AD B2C: Ověřuje uživatele a hostuje skript, který shromažďuje informace o zařízení, jakmile uživatelé spustí cílovou zásadu. Blokuje nebo zpochybňuje pokusy o přihlášení či registraci na základě doporučení rizik vráceného službou Transmit.
  • Vlastní šablony uživatelského rozhraní: Přizpůsobí obsah HTML stránek vykreslených službou Azure AD B2C. Mezi tyto stránky patří fragmenty kódu JavaScriptu vyžadované pro detekci rizik přenosu.
  • Služba přenosu dat pro shromažďování: Dynamicky vložený skript, který protokoluje informace o zařízení, jež se používají k neustálému vyhodnocování rizika při interakcích uživatelů.
  • Koncový bod rozhraní DRS API: Poskytuje doporučení k riziku na základě shromážděných dat. Azure AD B2C komunikuje s tímto koncovým bodem pomocí konektoru REST API.
  • Azure Functions: Váš hostovaný koncový bod rozhraní API, který se používá k získání doporučení z koncového bodu Transmit DRS prostřednictvím konektoru rozhraní API.

Následující diagram architektury znázorňuje implementaci popsanou v průvodci:

Diagram architektury Přenos a Azure AD B2C

  1. Uživatel se přihlásí pomocí Azure AD B2C.
  2. Vlastní stránka inicializuje sadu Transmit SDK, která spustí streamování informací o zařízeních do Transmit.
  3. Azure AD B2C hlásí událost přihlášení systému Transmit, aby získala akční token.
  4. Přenos vrátí token akce a Azure AD B2C pokračuje s přihlášením nebo přihlášením uživatele.
  5. Jakmile se uživatel přihlásí, Azure AD B2C požádá o doporučení k riziku od Transmitu pomocí Azure Function.
  6. Funkce Azure odešle požadavek na doporučení pomocí tokenu akce.
  7. Funkce Transmit vrátí doporučení (výzva, povolení, nebo zamítnutí) na základě shromážděných informací o zařízení.
  8. Funkce Azure Functions předá výsledek doporučení do Azure AD B2C, aby to zvládla odpovídajícím způsobem.
  9. Azure AD B2C v případě potřeby provede další kroky, jako je vícefaktorové ověřování a dokončí tok registrace nebo přihlášení.

Požadavky

Krok 1: Vytvoření aplikace Pro přenos

Přihlaste se k portálu pro správu přenosu a vytvořte aplikaci:

  1. V aplikaci vyberte Přidat aplikaci.

  2. Nakonfigurujte aplikaci s následujícími atributy:

    Vlastnictví Popis
    Název aplikace Název aplikace
    Název klienta Název klienta
    Přesměrovací URI Zadejte adresu URL webu. Tento atribut je povinné pole, ale nepoužívá se pro tento tok.
  3. Vyberte Přidat.

  4. Při registraci se zobrazí ID klienta a tajný klíč klienta . Poznamenejte si hodnoty pro pozdější použití.

Krok 2: Vytvoření vlastního uživatelského rozhraní

Začněte integrací funkce Přenést DRS do front-endové aplikace B2C. Vytvořte vlastní přihlašovací stránku, která integruje sadu Transmit SDK a nahradí výchozí přihlašovací stránku Azure AD B2C.

Po aktivaci začne Funkce Odeslat SLUŽBU DRS shromažďovat informace pro uživatele, který pracuje s vaší aplikací. Přenos DRS vrátí token akce, který Azure AD B2C potřebuje pro doporučení k riziku.

Pokud chcete integrovat Přenos DRS do přihlašovací stránky B2C, postupujte takto:

  1. Připravte vlastní soubor HTML pro přihlašovací stránku na základě ukázkových šablon. Přidejte následující skript pro načtení a inicializaci sady Transmit SDK a získání tokenu akce. Vrácený token akce by měl být uložen ve skrytém elementu HTML (ts-drs-response v tomto příkladu).

    <!-- Function that obtains an action token -->
    <script>
    function fill_token() {
       window.tsPlatform.drs.triggerActionEvent("login").then((actionResponse) => {
          let actionToken = actionResponse.actionToken;
          document.getElementById("ts-drs-response").value = actionToken;
          console.log(actionToken);
       });
    }
    </script>
    
    <!-- Loads DRS SDK -->
    <script src="https://platform-websdk.transmitsecurity.io/platform-websdk/latest/ts-platform-websdk.js" defer> </script>
    
    <!-- Upon page load, initializes DRS SDK and calls the fill_token function -->
    <script defer>
    window.onload = function() {
       if (window.tsPlatform) {
          // Client ID found in the app settings in Transmit Admin portal
          window.tsPlatform.initialize({ clientId: "[clientId]" });
          console.log("Transmit Security platform initialized");
          fill_token();
       } else {/
          console.error("Transmit Security platform failed to load");
       }
    };
    </script>
    
  2. Povolení verzí rozložení javascriptu a stránek v Azure AS B2C

  3. Hostování stránky HTML na webovém koncovém bodu s podporou sdílení prostředků mezi zdroji (CORS) vytvořením účtu úložiště a přidáním podpory CORS pro Azure Storage

Krok 3: Vytvoření funkce Azure Functions

Azure AD B2C může prostřednictvím konektoru rozhraní API získat doporučení ohledně rizika. Předání tohoto požadavku prostřednictvím zprostředkujícího webového rozhraní API (například pomocí Azure Functions) poskytuje větší flexibilitu v logice implementace.

Pomocí těchto kroků vytvořte funkci Azure, která pomocí tokenu akce z front-endové aplikace získá doporučení z koncového bodu Přenos DRS.

  1. Vytvořte vstupní bod funkce Azure, což je funkce aktivovaná protokolem HTTP, která zpracovává příchozí požadavky HTTP.

    public static async Task<HttpResponseMessage> Run(HttpRequest req, ILogger log)
    {
        // Function code goes here
    }
    
  2. Extrahujte token akce z požadavku. Vaše vlastní zásada definuje, jak předat požadavek v parametrech řetězce dotazu nebo textu.

    // Checks for the action token in the query string
    string actionToken = req.Query["actiontoken"];
    
    // Checks for the action token in the request body
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    actionToken = actionToken ?? data?.actiontoken;
    
  3. Ověřte token akce tak, že zkontrolujete, že zadaná hodnota není prázdná nebo null:

    // Returns an error response if the action token is missing
    if (string.IsNullOrEmpty(actionToken))
       {
           var respContent = new { version = "1.0.0", status = (int)HttpStatusCode.BadRequest, userMessage = "Invalid or missing action token" };
           var json = JsonConvert.SerializeObject(respContent);
           log.LogInformation(json);
           return new HttpResponseMessage(HttpStatusCode.BadRequest)
           {
               Content = new StringContent(json, Encoding.UTF8, "application/json")
           };
       }
    
  4. Zavolejte rozhraní Transmit DRS API. Klientské ID a klientský tajný klíč získané v kroku 1 by měly být použity k generování bearer tokenů pro autorizaci API. Nezapomeňte do local.settings.json souboru přidat potřebné proměnné prostředí (například ClientId a ClientSecret).

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {transmitSecurityApiKey}");
    
    // Add code here that sends this GET request:
    // https://api.transmitsecurity.io/risk/v1/recommendation?action_token=[YOUR_ACTION_TOKEN]
    
    HttpResponseMessage response = await client.GetAsync(urlWithActionToken);
    
  5. Zpracování odpovědi rozhraní API Následující kód předá odpověď rozhraní API v případě úspěchu; v opačném případě zpracovává všechny chyby.

     if (response.IsSuccessStatusCode)
       {
           log.LogInformation(responseContent);
           return new HttpResponseMessage(HttpStatusCode.OK)
           {
               Content = new StringContent(responseContent, Encoding.UTF8, "application/json")
           };
       }
       else
       {
           var errorContent = new { version = "1.0.0", status = (int)response.StatusCode, userMessage = "Error calling Transmit Security API" };
           var json = JsonConvert.SerializeObject(errorContent);
           log.LogError(json);
           return new HttpResponseMessage(response.StatusCode)
           {
               Content = new StringContent(json, Encoding.UTF8, "application/json")
           };
       }
    

Krok 4: Konfigurace vlastních zásad

Do aplikace Azure B2C zahrnete přenos DRS rozšířením vlastních zásad.

  1. Stáhněte si úvodní balíček vlastních zásad , abyste mohli začít (viz Vytvoření vlastních zásad v Azure AD B2C).

  2. Vytvořte nový soubor, který dědí z TrustFrameworkExtensions. Tento rozšíření základní politiky zahrnuje přizpůsobení konkrétnímu tenantovi pro použití Transmit DRS.

    <BasePolicy>
       <TenantId>YOUR AZURE TENANT</TenantId>
       <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId>
    </BasePolicy>
    
  3. BuildingBlocks V části definujte actiontoken, ts-drs-response a ts-drs-recommendation jako nároky:

    <BuildingBlocks>
       <ClaimsSchema>
       <ClaimType Id="ts-drs-response">
          <DisplayName>ts-drs-response</DisplayName>
          <DataType>string</DataType>
          <UserHelpText>Parameter provided to the DRS service for the response</UserHelpText>
          <UserInputType>TextBox</UserInputType>
       </ClaimType>
       <ClaimType Id="actiontoken">
          <DisplayName>actiontoken</DisplayName>
          <DataType>string</DataType>
          <UserHelpText />
          <UserInputType>TextBox</UserInputType>
       </ClaimType>
       <ClaimType Id="ts-drs-recommendation">
          <DisplayName>recommendation</DisplayName>
          <DataType>string</DataType>
          <UserHelpText />
          <UserInputType>TextBox</UserInputType>
       </ClaimType>
       </ClaimsSchema>
    <BuildingBlocks>
    
  4. BuildingBlocks V části přidejte odkaz na vlastní uživatelské rozhraní:

    <BuildingBlocks>
       <ClaimsSchema>
       <!-- your claim schemas-->
       </ClaimsSchema>
    
       <ContentDefinitions>
       <ContentDefinition Id="api.selfasserted">
       <!-- URL of your hosted custom HTML file-->
          <LoadUri>YOUR_SIGNIN_PAGE_URL</LoadUri>
       </ContentDefinition>
       </ContentDefinitions>
    </BuildingBlocks>
    
  5. V části ClaimsProviders nakonfigurujte poskytovatele deklarací, který obsahuje následující technické profily: jeden (SelfAsserted-LocalAccountSignin-Email), který generuje token akce, a druhý (login-DRSCheck, v našem příkladu) pro funkci Azure, která přijímá token akce jako vstup a generuje doporučení rizika.

    <ClaimsProviders>
       <ClaimsProvider>
       <DisplayName>Sign in using DRS</DisplayName>
       <TechnicalProfiles>
          <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
             <DisplayName>Local Account Sign-in</DisplayName>
             <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
             <Metadata>
             <Item Key="SignUpTarget">SignUpWithLogonEmailExchange</Item>
             <Item Key="setting.operatingMode">Email</Item>
             <Item Key="setting.showSignupLink">true</Item>
             <Item Key="setting.showCancelButton">false</Item>
             <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
             <Item Key="language.button_continue">Sign In</Item>
             </Metadata>
             <IncludeInSso>false</IncludeInSso>
             <InputClaims>
             <InputClaim ClaimTypeReferenceId="signInName" />
             </InputClaims>
             <OutputClaims>
             <OutputClaim ClaimTypeReferenceId="signInName" Required="true" />
             <OutputClaim ClaimTypeReferenceId="password" Required="true" />
             <OutputClaim ClaimTypeReferenceId="objectId" />
             <OutputClaim ClaimTypeReferenceId="authenticationSource" />
             <!-- Outputs the action token value provided by the frontend-->
             <OutputClaim ClaimTypeReferenceId="ts-drs-response" />
             </OutputClaims>
             <ValidationTechnicalProfiles>
             <ValidationTechnicalProfile ReferenceId="login-DRSCheck" />
             <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
             </ValidationTechnicalProfiles>
          </TechnicalProfile>
          <TechnicalProfile Id="login-DRSCheck">
             <DisplayName>DRS check to validate the interaction and device </DisplayName>
             <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
             <Metadata>
             <!-- Azure Function App -->
             <Item Key="ServiceUrl">YOUR_FUNCTION_URL</Item>
             <Item Key="AuthenticationType">None</Item>
             <Item Key="SendClaimsIn">Body</Item>
             <!-- JSON, Form, Header, and Query String formats supported -->
             <Item Key="ClaimsFormat">Body</Item>
             <!-- Defines format to expect claims returning to B2C -->
             <!-- REMOVE the following line in production environments -->
             <Item Key="AllowInsecureAuthInProduction">true</Item>
             </Metadata>
             <InputClaims>
             <!-- Receives the action token value as input -->
             <InputClaim ClaimTypeReferenceId="ts-drs-response" PartnerClaimType="actiontoken" DefaultValue="0" />
             </InputClaims>
             <OutputClaims>
             <!-- Outputs the risk recommendation value returned by Transmit (via the Azure function) -->
             <OutputClaim ClaimTypeReferenceId="ts-drs-recommendation" PartnerClaimType="recommendation.type" />
             </OutputClaims>
          </TechnicalProfile>
       </TechnicalProfiles>
       </ClaimsProvider>
    </ClaimsProviders>
    
  6. V části UserJourneys vytvořte novou cestu uživatele (SignInDRS v našem příkladu), která identifikuje uživatele a provede příslušné kroky ochrany identity na základě doporučení pro riziko přenosu. Cesta může například pokračovat normálně, pokud přenos vrátí povolení nebo důvěru, ukončí se a informuje uživatele o problému, pokud je odepřen, nebo v případě výzvy aktivuje proces ověření zvýšené úrovně.

  <UserJourneys>
    <UserJourney Id="SignInDRS">
      <OrchestrationSteps>
        <!-- Step that identifies the user by email and stores the action token -->
        <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.selfasserted">
          <ClaimsProviderSelections>
            <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
          </ClaimsProviderSelections>
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
          </ClaimsExchanges>
        </OrchestrationStep>

        <!-- Step to perform DRS check -->
        <OrchestrationStep Order="2" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="DRSCheckExchange" TechnicalProfileReferenceId="login-DRSCheck" />
          </ClaimsExchanges>
        </OrchestrationStep>

        <!-- Conditional step for ACCEPT or TRUST -->
        <OrchestrationStep Order="3" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
              <Value>ts-drs-recommendation</Value>
              <Value>ACCEPT</Value>
              <Value>TRUST</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <!-- Define the ClaimsExchange or other actions for ACCEPT or TRUST -->
        </OrchestrationStep>

        <!-- Conditional step for CHALLENGE -->
        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
              <Value>ts-drs-recommendation</Value>
              <Value>CHALLENGE</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <!-- Define the ClaimsExchange or other actions for CHALLENGE -->
        </OrchestrationStep>

        <!-- Conditional step for DENY -->
        <OrchestrationStep Order="5" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
              <Value>ts-drs-recommendation</Value>
              <Value>DENY</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <!-- Define the ClaimsExchange or other actions for DENY -->
        </OrchestrationStep>
    </UserJourney>
  </UserJourneys>
  1. Uložte soubor zásad jako DRSTrustFrameworkExtensions.xml.

  2. Vytvořte nový soubor, který dědí ze souboru, který jste uložili. Rozšiřuje politiku přihlášení, která funguje jako vstupní bod pro uživatelské procesy registrace a přihlášení pomocí systému Transmit DRS.

    <BasePolicy>
       <TenantId>YOUR AZURE TENANT</TenantId>
       <PolicyId>B2C_1A_DRSTrustFrameworkExtensions</PolicyId>
    </BasePolicy>
    
  3. RelyingParty V této části nakonfigurujte cestu uživatele s vylepšenou službou DRS (SignInDRSv našem příkladu).

    <RelyingParty>
       <DefaultUserJourney ReferenceId="SignInDRS" />
       <UserJourneyBehaviors>
       <ScriptExecution>Allow</ScriptExecution>
       </UserJourneyBehaviors>
       <TechnicalProfile Id="PolicyProfile">
       <DisplayName>PolicyProfile</DisplayName>
       <Protocol Name="OpenIdConnect" />
       <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="displayName" />
          <OutputClaim ClaimTypeReferenceId="givenName" />
          <OutputClaim ClaimTypeReferenceId="surname" />
          <OutputClaim ClaimTypeReferenceId="email" />
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
       </OutputClaims>
       <SubjectNamingInfo ClaimType="sub" />
       </TechnicalProfile>
    </RelyingParty>
    
  4. Uložte soubor zásad jako DRSSignIn.xml.

Nahrajte vlastní politiku

Pomocí adresáře s tenantem Azure AD B2C nahrajte vlastní zásady:

  1. Přihlaste se do Azure Portalu.
  2. Na panelu nástrojů portálu vyberte Adresáře a předplatná.
  3. V nastavení portálu | Na stránce Adresáře a předplatná v seznamu názvů adresářů vyhledejte adresář Azure AD B2C a pak vyberte Přepnout.
  4. V části Zásady vyberte Architekturu prostředí identit.
  5. Vyberte Nahrát vlastní zásady a pak nahrajte aktualizované soubory vlastních zásad.

Krok 6: Testování vlastních zásad

Pomocí adresáře s tenantem Azure AD B2C otestujte vlastní zásady:

  1. V tenantovi Azure AD B2C a v části Zásady vyberte Architekturu prostředí identit.
  2. V části Vlastní zásady vyberte zásadu přihlášení.
  3. V části Aplikace vyberte webovou aplikaci, kterou jste zaregistrovali.
  4. Vyberte Spustit.
  5. Dokončete tok uživatele.

Další kroky