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

时间:2018-01-28 09:02:20

标签: asp.net-web-api multi-tenant openid-connect azure-ad-b2c owin-middleware

当前情况: Web App和Web API使用AAD B2C进行身份验证,并且工作正常。每个客户都有一个独特的租户。 OpenIdConnectAuthenticationOptions(网络应用)和OAuthBearerAuthenticationOptions(api)在应用Startup处设置。

如下所述:Token based authentication for both Web App and Web API using Azure AD B2C

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

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

enter image description here

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

即。根据{{​​1}}而不是应用程序OpenIdConnectAuthenticationOptions,从数据库(或内存)中设置Request.Url(租户,applicationId,signInPolicy等)。

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

即。根据收到的令牌clientId而不是应用程序Startup

动态设置OAuthBearerAuthenticationOptions个配置

2 个答案:

答案 0 :(得分:1)

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

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

android:layout_marginStart="-64dp"

答案 1 :(得分:0)

根据我认为的假设,这里有一些东西是行不通的。

  • 首先,B2C没有多个租户的概念"。 B2C本质上是 租户中的目录,不能进一步分开。您 您的租户可以拥有多个B2C目录,比如每个 客户,但你不能拥有多个隔离的客户 单个B2C目录。

  • 其次,如果您确实已将应用程序连接到多个B2C 目录,您需要管理连接器,应用程序ID,密钥 等等。然后由您的应用程序来决定哪个 一个基于某些数据使用(URL访问等)。

关于你是如何加入用户,我还会问一些问题?他们可以自己注册吗?他们有自己的用户商店吗?

如果您确实希望为每个组织分别保留用户帐户(并且他们还没有SAML / OIDC身份提供商),那么我会执行以下操作:

通过这种方式,您的应用程序只需要信任和维护单个B2C目录,如果您的客户拥有自己的OIDC或SAML端点,则它们将成为目录中的声明提供者,而不是单独的B2C实例。 / p>