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

AzureADB2C的SaaS应用程序:客户端SSO的用户流?,azure,asp.net-core-mvc,azure-active-directory,azure-ad-b2c,Azure,Asp.net Core Mvc,Azure Active Directory,Azure Ad B2c,我们有一个SaaS web应用程序,我们的客户要求对每个应用程序进行SSO身份验证。我们正在使用AzureADB2C,它工作得很好,但现在正在考虑添加SSO 我在B2C原则中加入了SSO设置,效果很好,但在面向客户的登录屏幕上,一个“MyCompanyso”按钮真的弄乱了我们的登录屏幕 所以现在我的想法是有一个单独的用户流来处理每个SSO设置。从我们开始。我们将转到MyCompany.OurSaaSApp.us,这将直接将它们转发到用户流端点,并提示它们使用SSO帐户(AzureAD)登录 这一

我们有一个SaaS web应用程序,我们的客户要求对每个应用程序进行SSO身份验证。我们正在使用AzureADB2C,它工作得很好,但现在正在考虑添加SSO

我在B2C原则中加入了SSO设置,效果很好,但在面向客户的登录屏幕上,一个“MyCompanyso”按钮真的弄乱了我们的登录屏幕

所以现在我的想法是有一个单独的用户流来处理每个SSO设置。从我们开始。我们将转到MyCompany.OurSaaSApp.us,这将直接将它们转发到用户流端点,并提示它们使用SSO帐户(AzureAD)登录

这一切似乎都在努力工作,但我在AzureADB2C中间件中发现了以下错误:

Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:警告:.AspNetCore.Correlation。找不到状态属性

Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:信息:远程身份验证错误:关联失败

然后我被抽到一个错误页面,登录失败

所以有两件事。。。 1)我是否知道我们想要实现的目标,朝着正确的方向前进 2.)我们需要做些什么来解决这个问题

谢谢大家的帮助,非常感谢

(注:)


只是重申一下。当自定义身份提供程序连接到我在应用程序中配置的现有SignUpOrIn用户流时,SSO可以正常工作。只有当我尝试使用另一个我想专门用于此SSO的用户流时,才会出现此错误。

我不确定是否存在此特定错误,尽管“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);
    }
私有任务OnRedirectToIdentityProvider(RedirectToIdentityProviderNotification)
{
//var policy=notification.OwinContext.Get(“策略”);
var tenantSegment=notification.Request.Path.Value.Split(新字符[]{'/'},StringSplitOptions.RemoveEmptyEntries)[0];
如果(!string.IsNullOrEmpty(tenantSegment)和&!tenantSegment.Equals(DefaultPolicy))
{
notification.ProtocolMessage.IssuerAddress=notification.ProtocolMessage.IssuerAddress.ToLower().Replace(DefaultPolicy.ToLower(),$“B2C_1A{tenantSegment.ToLower()}\u SignupSigningPolicy”);
}
返回Task.FromResult(0);
}

如果您需要注入任何其他与租户相关的内容,那么就可以在这里进行。

Hi PJ。Azure AD B2C似乎没有在对web应用的身份验证响应中返回状态参数。使用浏览器开发工具,你能确认这是真的吗?可能是。。。老实说,我甚至不知道那是什么。。。我可以访问B2C原则,我在哪里可以找到它?如果这是字面上的“状态”,如在州/普罗维登斯,有没有一种方法将其从需求中分离出来?我们的应用程序永远不需要这些信息。(但不知道这是不是真的。哈哈)惊人的信息。我想我知道这里发生了什么。可能需要一点时间才能把它冲洗出来测试一下。然而,令人惊讶的洞察力。非常感谢你。我一开始工作就回来。