Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用单个.NET核心web应用程序实例中的动态租户对Azure Active Directory中的用户进行身份验证?_C#_Azure_Asp.net Core_.net Core_Active Directory - Fatal编程技术网

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

C# 如何使用单个.NET核心web应用程序实例中的动态租户对Azure Active Directory中的用户进行身份验证?,c#,azure,asp.net-core,.net-core,active-directory,C#,Azure,Asp.net Core,.net Core,Active Directory,我已经创建了.NETCore2.1Web应用程序。之后,此应用程序与Azure Active Directory集成(Microsoft.AspNetCore.Authentication.AzureAD)。在我的active directory中有几个租户,为了对用户进行身份验证,需要提供AD租户id、AD应用程序客户端id 有没有办法在我的Active Directory中使用所有租户进行身份验证 public class Startup { // Generated code

我已经创建了.NETCore2.1Web应用程序。之后,此应用程序与Azure Active Directory集成(
Microsoft.AspNetCore.Authentication.AzureAD
)。在我的active directory中有几个租户,为了对用户进行身份验证,需要提供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
}

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

当Azure AD在/common端点上收到请求时,它会将用户登录并发现该用户来自哪个租户。/common端点不对应于租户,也不是颁发者,当我们检查/common元数据中的颁发者值时,它有一个模板URL而不是实际值: 发行人:

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

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

有关在多租户中验证用户的更多信息,请查看以下文档。 和

我希望这有帮助

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