在Azure AD B2C中使用Microsoft帐户提供程序时,格式不同的issuerUserId

时间:2018-06-12 22:36:24

标签: azure azure-ad-b2c

我们正在研究将现有身份验证系统迁移到Azure AD B2C。我们当前的系统接受MSA和Google登录,我们使用基于IdentityServer的内部开发服务,该服务存储来自Azure表存储中第三方IdP的ID。

我已按照setting up MSA as an ID providermigrating users with a social account的说明进行操作,并在将其作为userIdentities发布到AD Graph API时将我现有的MSA ID转换为base64(与以下示例代码一致)上面的第二个链接)。但是当我使用MSA登录时,它不会识别我的帐户,而是将我引导至注册页面(作为我已定义的登录/注册政策的一部分)。

如果我继续创建用户,然后使用Graph API中的/users/<new-user-id>端点检查新创建的用户,那么与我为Microsoft存储的内容相比,我会找回一个看起来很奇怪的issuerUserId用户目前。

我的现有用户的ID类似于1234ab56789cde01,并且当base64解码时,通过B2C发送给我的ID格式为AAAAAAAAAAAAAAAAAAAAAAbCdEF12GhIj_KlM34nOPQ。 (更改了值以避免任何潜在的隐私问题。)首都'A'始终存在于开头,我从新格式的全部字母数字值中获取字符,与仅具有十六进制范围的原始ID相比较字符。

我设法让Google帐户正常运行。所有必要的是将它们转换为base64,它们才能正常工作。但我正在努力弄清楚如何迁移MSA。要么我在应用程序注册方面做错了,要么生成AAAAAAAA - 我缺少的前缀ID的另一个步骤。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

Microsoft帐户的内置身份提供程序从Microsoft帐户的(主题)声明映射到 userIdentity的 issuerUserId 属性对象。

如果您想要迁移从Microsoft帐户的其他声明(例如 oid (对象标识符)声明)映射的身份,那么您必须use custom policies然后add a custom identity provider for Microsoft Account进行了以下修改:

<ClaimsProvider>
    <Domain>live.com</Domain>
    <DisplayName>Microsoft Account</DisplayName>
    <TechnicalProfiles>
        <TechnicalProfile Id="MSA-OIDC">
            <DisplayName>Microsoft Account</DisplayName>
            <Protocol Name="OpenIdConnect" />
            <Metadata>
                <Item Key="ProviderName">https://login.live.com</Item>
                <Item Key="METADATA">https://login.live.com/.well-known/openid-configuration</Item>
                <Item Key="response_types">code</Item>
                <Item Key="response_mode">form_post</Item>
                <Item Key="scope">openid profile email</Item>
                <Item Key="HttpBinding">POST</Item>
                <Item Key="UsePolicyInRedirectUri">0</Item>
                <Item Key="client_id">Your Microsoft application client id</Item>
            </Metadata>
            <CryptographicKeys>
                <Key Id="client_secret" StorageReferenceId="B2C_1A_MSASecret" />
            </CryptographicKeys>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="live.com" />
                <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
                <!-- ORIGINAL: The following output claims maps from the "sub" claim to the "issuerUserId" property. -->
                <!--<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="sub" />-->
                <!-- MODIFICATION: The following output claims maps from the "oid" claim to the "issuerUserId" property. -->
                <OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="oid" />
                <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
                <OutputClaim ClaimTypeReferenceId="email" />
            </OutputClaims>
            <OutputClaimsTransformations>
                <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
                <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
                <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
                <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
            </OutputClaimsTransformations>
            <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
        </TechnicalProfile>
    </TechnicalProfiles>
</ClaimsProvider>

有关自定义策略入门的信息,请参阅Azure Active Directory B2C: Get started with custom policies