我们当前正在使用Azure B2C通过React.js应用程序进行身份验证。我们正在使用的库是msal.js。
最初,我们使用的是启用了SSO的标准用户流,并且msaljs库可以正常运行(并且仍然可以运行)。在该应用程序流程中,对B2C的第一次调用将要求输入id_token,然后在iframe中发起第二个调用,该调用由于用户已经登录而自动起作用。这将自动发生,并且用户只会看到自己正在登录没有任何问题。在这种情况下,在iframe中进行身份验证的调用将使用access_token返回302返回我们的应用,以访问我们的API。
我们现在已切换到自定义策略,以自定义登录页面并使用javascript。这是使用自定义策略设置的,并且可以正确使用多因素身份验证进行登录。流程如下:
这是所有情况(我想),因为SSO无法与自定义策略一起正常工作。在第一种情况下,如果有来自B2C的用户流,SSO将启动并使用访问令牌将用户自动重定向回应用程序;在第二种情况下,由于SSO无法正常工作,用户必须登录两次。
我的自定义策略如下所示,它是基于(非常稀疏)文档中提供的B2C自定义策略的示例构建的:
<TechnicalProfile Id="SM-AAD">
<DisplayName>Session Mananagement Provider</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="objectId" />
<PersistedClaim ClaimTypeReferenceId="signInName" />
<PersistedClaim ClaimTypeReferenceId="authenticationSource" />
<PersistedClaim ClaimTypeReferenceId="identityProvider" />
<PersistedClaim ClaimTypeReferenceId="newUser" />
<PersistedClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" />
</PersistedClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectIdFromSession" DefaultValue="true"/>
</OutputClaims>
</TechnicalProfile>
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
...
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
<UserJourneyBehaviors>
<SingleSignOn Scope="Tenant" KeepAliveInDays="7" />
<SessionExpiryType>Absolute</SessionExpiryType>
<SessionExpiryInSeconds>1200</SessionExpiryInSeconds>
<ScriptExecution>Allow</ScriptExecution>
</UserJourneyBehaviors>
尽管如此,我仍无法使SSO与自定义配置文件一起正常工作。我注意到的一件事是未使用SSO概要文件中的ClaimType“ objectIdFromSession”。我本以为可以用来确定是否应跳过业务流程步骤,对吗?
对于可能出什么问题的其他帮助或提示,将不胜感激。