다음을 통해 공유


자습서: Azure Active Directory B2C를 사용하여 BioCatch 구성하기

Azure AD B2C(Azure Active Directory B2C) 인증을 BioCatch 기술과 통합하여 CIAM(고객 ID 및 액세스 관리) 보안 태세를 강화하는 방법을 알아봅니다. BioCatch 제품은 합법적인 고객을 구분하는 데 도움이 되는 인사이트를 얻기 위해 사용자의 실제 및 인지적 디지털 동작을 분석합니다.

BioCatch에 대해 자세히 알아보려면 biocatch.com으로 이동합니다.

필수 조건

시작하려면 다음이 필요합니다.

시나리오 설명

BioCatch 통합에는 다음 구성 요소가 포함됩니다.

  • 웹앱 또는 웹 서비스 - 사용자는 BioCatch로 이동하는 고유한 클라이언트 세션 ID를 인스턴스화하는 이 웹 서비스를 탐색합니다.
    • 세션 ID는 사용자 동작 특성을 BioCatch로 전송합니다.
  • 메서드 - 세션 ID를 Azure AD B2C로 보냅니다. 이 예에서 JavaScript는 값을 숨겨진 HTML 필드에 입력합니다.
  • Azure AD B2C 사용자 지정 UI - JavaScript에서 세션 ID 입력에 대한 HTML 필드를 숨깁니다.
  • Azure AD B2C 사용자 지정 정책:
    • 자체 어설션 기술 프로필을 통해 세션 ID를 클레임으로 가져옵니다.
    • REST API 클레임 공급자를 통해 BioCatch와 통합하고 세션 ID를 BioCatch에 전달합니다.
    • 사용자 지정 정책 논리에 대해 BioCatch에서 반환되는 여러 사용자 지정 클레임
    • 사용자 경험은 반환된 클레임을 평가하고 다단계 인증과 같은 조건부 작업을 실행합니다.

자세히 보기:

다음 다이어그램은 세션 정보가 포함된 사용자 흐름을 보여 줍니다.

Diagram of user flows with session information.

  1. 사용자는 HTML, CSS 또는 JavaScript 값을 반환하는 웹 서비스를 찾은 다음 BioCatch JavaScript SDK를 로드합니다. 클라이언트 쪽 JavaScript는 BioCatch SDK에 대한 클라이언트 세션 ID를 구성합니다. 또는 웹 서비스가 클라이언트 세션 ID를 미리 구성하여 클라이언트로 보냅니다. BioCatch에 대한 인스턴스화된 BioCatch JavaScript SDK를 구성할 수 있으며, 이는 클라이언트 세션 ID를 사용하여 클라이언트 디바이스에서 BioCatch로 사용자 동작을 전송합니다.
  2. 사용자가 가입하거나 로그인하고 Azure AD B2C로 리디렉션됩니다.
  3. 사용자 경험에는 클라이언트 세션 ID를 입력하는 자체 어설션 클레임 공급자가 포함됩니다. 이 필드는 숨겨집니다. JavaScript를 사용하여 세션 ID를 필드에 입력합니다. 등록 또는 로그인을 계속하려면 다음을 선택합니다. 세션 ID는 위험 점수를 위해 BioCatch로 이동합니다. BioCatch는 세션 정보를 반환하고 허용 또는 차단을 권장합니다. 사용자 경험에는 반환된 클레임에 따라 작동하는 조건부 확인이 있습니다.
  4. 조건부 확인 결과에 따라 작업이 호출됩니다.
  5. 웹 서비스는 세션 ID를 사용하여 BioCatch API를 쿼리하여 위험 및 세션 정보를 결정할 수 있습니다.

BioCatch 시작

계정을 시작하려면 biocatch.com 문의하기 페이지로 이동합니다.

사용자 지정 UI 구성

CSS, JavaScript 또는 다른 방법을 사용하여 클라이언트 세션 ID 필드를 숨기는 것이 좋습니다. 테스트를 위해 필드 숨기기를 해제합니다. 예를 들어, JavaScript는 입력 필드를 다음과 같이 숨깁니다.

document.getElementById("clientSessionId").style.display = 'none';

Azure AD B2C Identity Experience Framework 정책 구성

  1. 시작하려면 자습서: Azure AD B2C에서 사용자 흐름 및 사용자 지정 정책 만들기를 참조하세요.

  2. 확장 파일에서 상속되는 새 파일을 만듭니다.

    <BasePolicy> 
    
        <TenantId>tenant.onmicrosoft.com</TenantId> 
    
        <PolicyId>B2C_1A_TrustFrameworkExtensions</PolicyId> 
    
      </BasePolicy> 
    
  3. BuildingBlocks 리소스 아래에서 입력 상자를 숨기도록 사용자 지정 UI에 대한 참조를 만듭니다.

    <ContentDefinitions> 
    
        <ContentDefinition Id="api.selfasserted"> 
    
            <LoadUri>https://domain.com/path/to/selfAsserted.cshtml</LoadUri> 
    
            <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.0</DataUri> 
    
          </ContentDefinition> 
    
        </ContentDefinitions>
    
  4. BuildingBlocks 리소스에서 다음 클레임을 추가합니다.

    <ClaimsSchema> 
    
          <ClaimType Id="riskLevel"> 
    
            <DisplayName>Session risk level</DisplayName> 
    
            <DataType>string</DataType>       
    
          </ClaimType> 
    
          <ClaimType Id="score"> 
    
            <DisplayName>Session risk score</DisplayName> 
    
            <DataType>int</DataType>       
    
          </ClaimType> 
    
          <ClaimType Id="clientSessionId"> 
    
            <DisplayName>The ID of the client session</DisplayName> 
    
            <DataType>string</DataType> 
    
            <UserInputType>TextBox</UserInputType> 
    
          </ClaimType> 
    
    </ClaimsSchema> 
    
  5. 클라이언트 세션 ID 필드에 대해 자체 어설션된 클레임 공급자를 구성합니다.

    <ClaimsProvider> 
    
          <DisplayName>Client Session ID Claims Provider</DisplayName> 
    
          <TechnicalProfiles> 
    
            <TechnicalProfile Id="login-NonInteractive-clientSessionId"> 
    
              <DisplayName>Client Session ID TP</DisplayName> 
    
              <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    
              <Metadata> 
    
                <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item> 
    
              </Metadata> 
    
              <CryptographicKeys> 
    
                <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> 
    
              </CryptographicKeys> 
    
            <!—Claim we created earlier --> 
    
              <OutputClaims> 
    
                <OutputClaim ClaimTypeReferenceId="clientSessionId" Required="false" DefaultValue="100"/> 
    
              </OutputClaims> 
    
            <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" /> 
    
            </TechnicalProfile> 
    
          </TechnicalProfiles> 
    
        </ClaimsProvider> 
    
  6. BioCatch에 대한 REST API 클레임 공급자를 구성합니다.

    <TechnicalProfile Id="BioCatch-API-GETSCORE"> 
    
          <DisplayName>Technical profile for BioCatch API to return session information</DisplayName> 
    
          <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    
          <Metadata> 
    
            <Item Key="ServiceUrl">https://biocatch-url.com/api/v6/score?customerID=<customerid>&amp;action=getScore&amp;uuid=<uuid>&amp;customerSessionID={clientSessionId}&amp;solution=ATO&amp;activtyType=<activity_type>&amp;brand=<brand></Item>
    
            <Item Key="SendClaimsIn">Url</Item> 
    
            <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item> 
    
            <!-- Set AuthenticationType to Basic or ClientCertificate in production environments --> 
    
            <Item Key="AuthenticationType">None</Item> 
    
            <!-- REMOVE the following line in production environments --> 
    
            <Item Key="AllowInsecureAuthInProduction">true</Item> 
    
          </Metadata> 
    
          <InputClaims> 
    
            <InputClaim ClaimTypeReferenceId="clientsessionId" /> 
    
          </InputClaims> 
    
          <OutputClaims> 
    
            <OutputClaim ClaimTypeReferenceId="riskLevel" /> 
    
            <OutputClaim ClaimTypeReferenceId="score" /> 
    
          </OutputClaims> 
    
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> 
    
        </TechnicalProfile> 
    
      </TechnicalProfiles>
    

    참고 항목

    BioCatch는 URL, 고객 ID 및 고유 사용자 ID(UUID)를 제공합니다. 고객 SessionID 클레임은 쿼리 문자열 매개 변수로 BioCatch에 전달됩니다. 작업 형식(예: MAKE_PAYMENT)을 선택할 수 있습니다.

  7. 다음 예를 사용하여 사용자 경험을 구성합니다.

    • clientSessionID를 클레임으로 가져옵니다.
    • 세션 정보를 가져오기 위해 BioCatch API를 호출합니다.
    • 반환된 클레임 위험이 낮은 경우 MFA 단계를 건너뛰고 그렇지 않으면 사용자 MFA를 적용합니다.
    <OrchestrationStep Order="8" Type="ClaimsExchange"> 
    
          <ClaimsExchanges> 
    
            <ClaimsExchange Id="clientSessionIdInput" TechnicalProfileReferenceId="login-NonInteractive-clientSessionId" /> 
    
          </ClaimsExchanges> 
    
        </OrchestrationStep> 
    
        <OrchestrationStep Order="9" Type="ClaimsExchange"> 
    
          <ClaimsExchanges> 
    
            <ClaimsExchange Id="BcGetScore" TechnicalProfileReferenceId=" BioCatch-API-GETSCORE" /> 
    
          </ClaimsExchanges> 
    
        </OrchestrationStep> 
    
        <OrchestrationStep Order="10" Type="ClaimsExchange"> 
    
          <Preconditions> 
    
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> 
    
              <Value>riskLevel</Value> 
    
              <Value>LOW</Value> 
    
              <Action>SkipThisOrchestrationStep</Action> 
    
            </Precondition> 
    
          </Preconditions> 
    
          <ClaimsExchanges> 
    
            <ClaimsExchange Id="PhoneFactor-Verify" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify" /> 
    
          </ClaimsExchanges>
    
  8. 신뢰 당사자를 구성합니다(선택 사항). BioCatch 반환 정보를 토큰(risklevel 및 점수)의 클레임으로 애플리케이션에 전달할 수 있습니다.

    <RelyingParty> 
    
    <DefaultUserJourney ReferenceId="SignUpOrSignInMfa" /> 
    
    <UserJourneyBehaviors> 
    
      <SingleSignOn Scope="Tenant" KeepAliveInDays="30" /> 
    
      <SessionExpiryType>Absolute</SessionExpiryType> 
    
      <SessionExpiryInSeconds>1200</SessionExpiryInSeconds> 
    
      <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" /> 
    
        <OutputClaim ClaimTypeReferenceId="identityProvider" />                 
    
        <OutputClaim ClaimTypeReferenceId="riskLevel" /> 
    
        <OutputClaim ClaimTypeReferenceId="score" /> 
    
        <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" /> 
    
      </OutputClaims> 
    
      <SubjectNamingInfo ClaimType="sub" /> 
    
    </TechnicalProfile> 
    
    </RelyingParty>
    

Azure AD B2C와 통합

Azure AD B2C에 정책 파일을 추가합니다. 다음 지침에서는 Azure AD B2C 테넌트가 있는 디렉터리를 사용합니다.

  1. Azure AD B2C 테넌트의 전역 관리자로 Azure Portal에 로그인합니다.
  2. 포털 도구 모음에서 디렉터리 + 구독을 선택합니다.
  3. 포털 설정, 디렉터리 + 구독 페이지의 디렉터리 이름 목록에서 Azure AD B2C 디렉터리를 찾습니다.
  4. 전환을 선택합니다.
  5. Azure Portal의 왼쪽 위에서 모든 서비스를 선택합니다.
  6. Azure AD B2C를 검색하고 선택합니다.
  7. Azure AD B2C>Identity Experience Framework로 이동합니다.
  8. 테넌트에 정책 파일을 업로드합니다.

솔루션 테스트

다음 지침은 자습서: Azure Active Directory B2C에서 웹 애플리케이션 등록을 참조하세요.

  1. JWT.MS로 리디렉션되는 더미 애플리케이션을 등록합니다.

  2. Identity Experience Framework에서 만든 정책을 선택합니다.

  3. 정책 창에서 더미 JWT.MS 애플리케이션을 선택합니다.

  4. 지금 실행을 선택합니다.

  5. 등록 절차를 수행하고 계정을 만듭니다.

  6. JWT.MS로 반환된 토큰에는 riskLevel 및 점수에 대한 2배 클레임이 있습니다.

  7. 다음 예제를 사용합니다.

    { 
    
      "typ": "JWT", 
    
      "alg": "RS256", 
    
      "kid": "_keyid" 
    
    }.{ 
    
      "exp": 1615872580, 
    
      "nbf": 1615868980, 
    
      "ver": "1.0", 
    
      "iss": "https://tenant.b2clogin.com/12345678-1234-1234-1234-123456789012/v2.0/", 
    
      "sub": "12345678-1234-1234-1234-123456789012", 
    
      "aud": "12345678-1234-1234-1234-123456789012", 
    
      "acr": "b2c_1a_signup_signin_biocatch_policy", 
    
      "nonce": "defaultNonce", 
    
      "iat": 1615868980, 
    
      "auth_time": 1615868980, 
    
      "name": "John Smith", 
    
      "email": "john.smith@contoso.com", 
    
      "given_name": "John", 
    
      "family_name": "Smith", 
    
      "riskLevel": "LOW", 
    
      "score": 275, 
    
      "tid": "12345678-1234-1234-1234-123456789012" 
    
    }.[Signature]  
    
    

추가 리소스