繁体   English   中英

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

[英]How to authenticate users in Azure Active Directory with dynamic tenants inside single instance of .NET Core web application?

我已经创建了.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
}

这是我的appsettings.json文件:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "Domain": "some-domain.com",
    "TenantId": "1a10b000-*******",
    "ClientId": "15a0421d-*******",
    "CallbackPath": "/signin-oidc"
  }
}

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

当Azure AD在/ common端点上收到请求时,它会向用户签名并发现用户来自哪个租户。 / common端点不对应于租户而不是发布者,当我们检查元数据中的发布者值时/ common它具有模板化URL而不是实际值:Issuer: https//sts.windows。净/ tenantid /

因此,多租户应用程序无法仅通过将元数据中的颁发者值与令牌中的颁发者值进行匹配来验证令牌。 多租户应用程序需要逻辑来决定哪些发行方值有效以及哪些不基于发行方值的租户ID部分。

例如,如果多租户应用程序仅允许从已注册其服务的特定租户登录,则必须检查令牌中的颁发者值或tenantid声明值,以确保租户在其列表中订阅者

有关在多租户中验证用户身份的详细信息,请查看以下文档。 将app转换为多租户Github示例以在多租户中对用户进行身份验证

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM