我们有一个SaaS网络应用程序,我们的客户要求每个客户都进行SSO身份验证。我们正在使用AzureADB2C,并且效果很好,但是现在正在考虑添加SSO。
我将SSO设置放入B2C原则中,并且效果很好,但实际上是在面向客户的登录屏幕上使用“ MyCompanySSO”按钮进行登录弄乱了我们的登录屏幕。
所以现在我的想法是拥有一个单独的用户流来处理每个SSO设置。从我们开始。我们将转到MyCompany.OurSaaSApp.us,它将其直接转发到用户流端点,并提示他们使用其SSO帐户(AzureAD)登录。
这一切似乎都可以尝试,但是我在AzureADB2C中间件中遇到了这些错误:
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:警告:.AspNetCore.Correlation。找不到国家财产。
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:信息:RemoteAuthentication中的错误:关联失败。
然后我被抽出到错误页面,并且登录失败。
所以2件事... 1.)我是否朝着正确的方向前进,知道我们要完成的目标 2.)我们需要做些什么来解决这个问题?
感谢大家的帮助,非常感谢。
(注:)
只是重申一下。将自定义身份提供程序附加到我在应用程序中配置的现有SignUpOrIn UserFlow时,SSO可以正常工作。当我尝试使用另一个我想专门用于此SSO的UserFlow时,只会出现此错误。
答案 0 :(得分:1)
我不确定该特定错误,尽管“ state”参数是您的应用在请求中发送的参数,出于关联目的,该请求将在令牌中返回。
每个联合会使用不同的策略听起来像是正确的方法,但是如果您是从单个应用程序执行操作,则需要在重定向时使用正确的权限(即策略)修改OIDC协议消息。
在OIDC中间件配置中,为RedirectToIdentityProvider
通知设置处理程序。然后用类似的方法处理它:
private Task OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> notification)
{
//var policy = notification.OwinContext.Get<string>("Policy");
var tenantSegment = notification.Request.Path.Value.Split(new char [] { '/'}, StringSplitOptions.RemoveEmptyEntries)[0];
if (!string.IsNullOrEmpty(tenantSegment) && !tenantSegment.Equals(DefaultPolicy))
{
notification.ProtocolMessage.IssuerAddress = notification.ProtocolMessage.IssuerAddress.ToLower().Replace(DefaultPolicy.ToLower(), $"B2C_1A_{tenantSegment.ToLower()}_SignUpSignInPolicy");
}
return Task.FromResult(0);
}
如果您需要注入与租户相关的任何其他信息,那就可以这样做。