与多个B2C租户共享单个WebApp和API部署

袖口

当前方案: Web App和Web API使用AAD B2C进行了身份验证,并且可以正常工作。每个客户都有一个唯一的租户。OpenIdConnectAuthenticationOptions(web app)和OAuthBearerAuthenticationOptions(api)在应用程序中设置Startup

如此处所述:使用Azure AD B2C对Web App和Web API进行基于令牌的身份验证

不幸的是,必须为每个客户都部署Web应用程序和API,以使它们分开。

要求:为多个客户使用相同的Web应用程序和API,而不是为每个客户部署它们。每个客户将为Web应用程序使用不同的URL。

在此处输入图片说明

问题1(Web应用程序):如何根据请求URL将用户重定向(用于身份验证)到正确的租户?

OpenIdConnectAuthenticationOptions基于Request.Url而不是application即时从数据库(或内存)中设置(租户,applicationId,signInPolicy等)Startup

问题2(API):如何使用正确的租户来验证收到的令牌?

OAuthBearerAuthenticationOptions基于接收的令牌clientId而不是应用程序即时设置配置Startup

袖口

根据@ManishJoisar的请求,这就是我很久以前解决问题的方式。这是一个旧的.net Framework 4.8代码示例。

请注意,最近B2C v2策略通过自定义策略提供了更好的联合实施。

public void ConfigureAuth(IAppBuilder app)
    {

        int index = 2000;
        foreach (var record in SystemConfig.ApiToWebUrl)
        {
            app.MapWhen(
                    context => System.Web.HttpContext.Current.Request.Url.BaseURL() == record.Key,
                    config =>
                    {
                        var customer = SystemConfig.GetWebSettings(true)[record.Value];
                        config.UseOAuthBearerAuthentication(CreateBearerOptionsFromPolicy(index, customer.B2CSignInPolicyId,
                                                customer.B2CAadInstance, customer.B2CTenant, customer.B2CApplicationId));
                    }
                );

            index++;
        }
    }

    public OAuthBearerAuthenticationOptions CreateBearerOptionsFromPolicy(int index, string b2cPlicyName,
                    string b2cInstance, string b2cTenant, string b2cClientId)
    {
        TokenValidationParameters tvps = new TokenValidationParameters
        {
            // This is where you specify that your API only accepts tokens from its own clients
            ValidAudience = b2cClientId,
            AuthenticationType = string.Format("{0}_{1}", b2cPlicyName, index)
        };

        var aadInstance = string.Format("https://{0}{1}", b2cTenant.Split('.')[0], ".b2clogin.com/{0}/{1}/v2.0/.well-known/openid-configuration");

        var config = String.Format(aadInstance, b2cTenant, b2cPlicyName);

        return new OAuthBearerAuthenticationOptions
        {
            // This SecurityTokenProvider fetches the Azure AD B2C metadata & signing keys from the OpenIDConnect metadata endpoint
            AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(config)),
            Provider = new CustomOAuthBearerProvider()
        };
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该在 SaaS 应用程序中使用单个 Azure AD B2C 租户还是多个租户?

我可以在Django App的DEV,STAGE和PROD环境中使用单个Azure AD B2C租户吗?

单个或多个B2C应用程序进行API访问?

将B2C租户用户迁移到其他B2C租户

Azure AD B2C租户和普通Azure AD租户之间有什么区别?

用于WebApp和API身份验证的Asp.Net Core 2.0和Azure AD B2C

Microsoft Graph Rest API V1.0:对B2C租户用户的访问

AzureAd B2C租户中的策略在哪里

Azure AD B2C 创建租户

如果租户有限制的 Azure B2C 租户,是否可以登录外部用户?

Azure B2C租户失败,并显示错误“租户创建失败”。

Azure AD B2C和Google API

我们可以在另一个B2C租户中添加B2C租户作为自定义IDP吗?

Azure B2C和ADFS

在租户中为 azure ad b2c 提供资源

通过Azure CLI链接现有的B2C租户

在Azure AD B2C租户上自动启用了MFA

如何使用Azure CLI访问AAD B2C租户

如何为现有目录创建 B2C 租户?

Azure AD B2C中的多租户Azure AD

弃用login.microsoftonline.com对B2C租户的实际影响

Azure AD B2C更改租户名称

无法在澳大利亚区域中创建Azure B2C租户

REST API 的 B2C 验证

如何在 Azure AD B2C 应用注册中公开多个 API?

Azure B2C-我们需要为每个单独的客户创建一个B2C租户,还是为所有客户创建一个B2C租户?最佳做法是什么?

Azure AD B2C OpenID与WS-Federation和SAML声明提供程序的单个注销连接

Azure B2C:允许其他开发人员通过他们的 Microsoft 帐户访问 B2C 租户

使用B2C租户域时,由Azure AD B2C保护的Azure功能返回未授权