具有AzureADB2C的SaaS应用程序:客户端SSO的用户流?

时间:2019-05-02 22:15:15

标签: azure asp.net-core-mvc azure-active-directory azure-ad-b2c

我们有一个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时,只会出现此错误。

1 个答案:

答案 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);
    }

如果您需要注入与租户相关的任何其他信息,那就可以这样做。