我们正在研究将现有身份验证系统迁移到Azure AD B2C。我们当前的系统接受MSA和Google登录,我们使用基于IdentityServer的内部开发服务,该服务存储来自Azure表存储中第三方IdP的ID。
我已按照setting up MSA as an ID provider和migrating 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的另一个步骤。任何帮助表示赞赏。谢谢!
答案 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。