c# - 如何在 .NET Core Web 应用程序的单个实例中使用动态租户对 Azure Active Directory 中的用户进行身份验证?
问题描述
我创建了 .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 端点 ( https://login.microsoftonline.com/common )
当 Azure AD 在 /common 端点上收到请求时,它会登录用户并发现用户来自哪个租户。/common 端点不对应于租户,也不是颁发者,当我们检查 /common 元数据中的颁发者值时,它有一个模板 URL 而不是实际值:颁发者:https://sts.windows。净/租户/
因此,多租户应用程序无法仅通过将元数据中的颁发者值与令牌中的颁发者值进行匹配来验证令牌。多租户应用程序需要逻辑来决定哪些颁发者值有效,哪些不是基于颁发者值的租户 ID 部分。
例如,如果多租户应用程序仅允许已注册其服务的特定租户登录,则它必须检查令牌中的颁发者值或租户 ID声明值,以确保该租户在其列表中的订阅者。
请查看以下文档以获取有关在多租户中对用户进行身份验证的更多信息。 将应用程序转换为多租户和 Github 示例以在多租户中验证用户
我希望这有帮助。
推荐阅读
- angular - 将日期范围添加到 NgbInputDatepicker 输入字段
- ios - 在尝试修复 NSRangeException 错误
- java - 为什么会显示错误:“资源泄漏:'键盘'从未关闭”?
- r - 基于 Shinydashboard 中的计时器更新传单标记
- php - Laravel 5.6 提交表单后下载 php/html 文件
- javascript - 自动完成后的 Onchange 事件不起作用
- javascript - 选择值状态更新时不调用 componentDidMount
- java - 将 pojo 列表复制到剪贴板
- layout - 在 Cs-Cart 中为所有已安装的语言设置相同的布局
- javascript - 如何使用 d3.force 对散点图进行动态、非重叠标记