如何使用.NET Core Web应用程序单个实例内的动态租户对Azure Active Directory中的用户进行身份验证?

Nic*_*ski 5 c# active-directory azure .net-core asp.net-core

我已经创建了.NET Core 2.1 Web应用程序。之后,此应用程序与Azure Active Directory(Microsoft.AspNetCore.Authentication.AzureAD)集成在一起。我的活动目录中有几个租户,为了对用户进行身份验证,需要提供AD租户ID,AD应用程序客户端ID。

有什么方法可以在Active Directory中使用所有租户进行身份验证?

public class Startup
{
     // Generated code

     public void ConfigureServices(IServiceCollection services)
     {
          services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                  .AddAzureAD(options => 
                              Configuration.Bind("AzureAd", options));

          services.Configure<OpenIdConnectOptions> 
                   (AzureADDefaults.OpenIdScheme, options =>
          {
               // OnTicketReceived, OnAuthenticationFailed, OnTokenValidated
          })
     }

     // Generated code
}
Run Code Online (Sandbox Code Playgroud)

这是我的appsettings.json文件:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "Domain": "some-domain.com",
    "TenantId": "1a10b000-*******",
    "ClientId": "15a0421d-*******",
    "CallbackPath": "/signin-oidc"
  }
}
Run Code Online (Sandbox Code Playgroud)

Moh*_*SFT 1

对于多租户应用程序,应用程序不知道用户来自哪个租户,因此我们无法向租户的端点发送请求。要从 AD 获取令牌,所有请求都将转到 /common 端点 ( https://login.microsoftonline.com/common )

\n\n

当 Azure AD 在 /common 终结点上收到请求时,它会让用户登录并发现该用户来自哪个租户。/common 端点不\xe2\x80\x99t 对应于租户并且不是颁发者,当我们检查 /common 元数据中的颁发者值时,它具有模板化 URL 而不是实际值:\n颁发者:https: // /sts.windows.net/tenantid/

\n\n

因此,多租户应用程序只需将元数据中的颁发者值与令牌中的颁发者值进行匹配即可\xe2\x80\x99t 验证令牌。多租户应用程序需要逻辑来决定哪些颁发者值有效,哪些不基于颁发者值的租户 ID 部分。

\n\n

例如,如果多租户应用程序仅允许已注册其服务的特定租户登录,则它必须检查令牌中的颁发者值或租户 ID声明值,以确保该租户位于其列表中订户数量。

\n\n

请查看以下文档,了解有关在多租户中对用户进行身份验证的详细信息。\n将应用程序转换为多租户并\n用于在多租户中对用户进行身份验证的 Github 示例

\n\n

我希望这有帮助。

\n