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

最佳答案

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

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

因此, Multi-Tenancy 应用程序无法仅通过将元数据中的发行者值与 token 中的发行者值进行匹配来验证 token 。 Multi-Tenancy 应用程序需要逻辑来确定哪些发行者值有效,哪些不是基于发行者值的租户ID部分。

例如,如果 Multi-Tenancy 应用程序仅允许已注册其服务的特定租户登录,则它必须检查 token 中的发行者值或 tenantd 声明值,以确保该租户在其订阅者列表中。

请查看以下文档,以获取有关在 Multi-Tenancy 中对用户进行身份验证的更多信息。
Convert app to be multi-tenant
Github sample to authenticate user in multi-tenant

我希望这有帮助。

关于c# - 如何使用.NET Core Web应用程序单个实例内的动态租户对Azure Active Directory中的用户进行身份验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55651840/

10-10 16:57