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