【问题标题】:Okta SSO with Azure ADB2COkta SSO 与 Azure ADB2C
【发布时间】:2021-08-28 14:35:25
【问题描述】:

对于使用 Azure ADB2C 作为 IDP 的应用程序,我们需要使用 Okta 作为 SSO。因此,基本流程是,用户登录 Okta,单击配置的应用程序磁贴。在后台,Okta 使用 Azure ADB2C 验证用户的身份(此用户详细信息将已存在于 ADB2C 中)并使用 ADB2C 提供的令牌将用户返回到应用程序。所以简而言之,用户将只登录 Okta,并且他们应该能够进入应用程序。我一直在查看各种博客和讨论,但没有任何东西指向这个要求的方向。任何人都可以通过提供所需的文档或必要的链接来指导我吗?

到目前为止,我已经尝试过类似的https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-salesforce-samlhttps://help.okta.com/en/prod/Content/Topics/integrations/open-id-connect.htm

但以上似乎并不能满足我们的需求。这可能吗?如果没有,使用 Azure ADB2C IDP 将 Okta 实施为 SSO 提供程序的最佳方法是什么?

【问题讨论】:

    标签: azure-ad-b2c okta


    【解决方案1】:

    按照添加通用 OIDC IDP 的操作: https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-generic-openid-connect

    对于自定义策略,您需要填写索赔提供者,例如

    <ClaimsProvider>
      <Domain>Okta</Domain>
      <DisplayName>Login using Okta</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Okta-OpenIdConnect">
          <DisplayName>OktaEmployee</DisplayName>
          <Description>Login with your Contoso account</Description>
          <Protocol Name="OpenIdConnect"/>
          <Metadata>
            <Item Key="METADATA">https://okta.com.....well-known/openid-configuration</Item>
            <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
            <Item Key="response_types">code</Item>
            <Item Key="scope">openid profile</Item>
            <Item Key="response_mode">form_post</Item>
            <Item Key="HttpBinding">POST</Item>
            <Item Key="UsePolicyInRedirectUri">false</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="client_secret" StorageReferenceId="B2C_1A_ContosoAppSecret"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="oid"/>
            <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" />
            <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" />
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
            <OutputClaim ClaimTypeReferenceId="UserTitle" PartnerClaimType="UserTitle" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
    

    https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-azure-ad-single-tenant?pivots=b2c-custom-policy#configure-azure-ad-as-an-identity-provider-1

    参考 OIDC 技术简介
    https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect-technical-profile

    要从 Azure AD B2C 用户处获取声明,请先阅读声明:
    https://docs.microsoft.com/en-us/azure/active-directory-b2c/configure-user-input?pivots=b2c-custom-policy#read-and-write-a-claim

    然后向在旅程中获得的 B2C 令牌发出任何声明
    https://docs.microsoft.com/en-us/azure/active-directory-b2c/configure-user-input?pivots=b2c-custom-policy#include-a-claim-in-the-token

    【讨论】:

    • 感谢您的回复。但是在这里,即使用户登录了 okta.com 站点并单击了在 okta 中配置的磁贴,用户也需要再次登录,对吗?有没有办法绕过它?
    • 不,他们不会,因为 Okta 的会话已经存在,因此他们只是通过 SSO 重定向回 AAD B2C,然后 AAD B2C 向应用程序发出令牌。
    • 还有一个问题。从 Okta 进行身份验证后,是否可以从 Azure ADB2C 获得与该用户相对应的一些声明(同一用户将在应用程序中注册)?场景是,我需要将一些客户属性附加到 ADB2C 生成的令牌中的声明中。这些属性仅适用于 ADB2C 用户
    • 是的,您可以从 Okta 令牌中映射 B2C 收到的任何声明,并将它们发布到发送到应用程序的 B2C 令牌中。使用输出声明部分进行此映射。如果用户流没有提供足够的映射选项,您可能需要自定义策略。自定义政策可让您映射任何声明。
    • 谢谢,但在我的场景中,假设我需要添加一个声明“UserTitle”,其值仅在 ADB2C 中可用,而 Okta 没有这样的声明。如何将其添加到 ADB2C 令牌中?那可能吗?所以基本上,除了映射属性之外,我还需要从 ADB2C 本身获取其他声明。
    【解决方案2】:

    【讨论】:

    • 我想使用 Okta 作为 Azure ADB2C 的 IDP,而不是相反。抱歉,如果我造成了混淆。
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2017-08-21
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多