ASP.NET Core 2.0 - Windows 身份验证,将 LDAP 组转换为角色



是否有人在 IIS 中使用 Windows 身份验证成功创建了 ASP.NET Core 2.0 应用来查询 LDAP 源(内部 AD 实例),并将组成员身份放入角色作为声明中以正确推动 [授权] 注释?中间件的文档没有直接说明如何执行此操作,或者在某些版本的 System.DirectoryServices 4.5preview for aspnetcore 中过时。 我知道.NET Framework通过System.DirectoryService为我们提供了对组成员身份的本机访问。 我的问题是,您是否可以尝试使用过滤器而不是中间件,并查询组的LDAP,并将其作为声明存储在cookie中。有没有更简单的方法可以做到这一点? 我有一个查询我们的LDAP源代码,在Novell.Directory.LDAP标准中工作,我可以在适当的时候使用它进行迭代。

提前感谢您的建议。

您可以使用在启动中配置的策略.cs来定义可与授权属性一起使用的 AD 组。但是,您会注意到,您必须在行中使用组的 SIDpolicy.RequireRole("S-1-5-4"),而不是使用组名称。

public void ConfigureServices(IServiceCollection services)
{
services.Configure<IISOptions>(options =>
{
options.AutomaticAuthentication = true;
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy("OnlyEmployees", policy =>
{
policy.AddAuthenticationSchemes(IISDefaults.AuthenticationScheme);
policy.RequireRole("S-1-5-4");
});
});
services.AddMvc();
}

要使用该策略,请使用授权属性装饰控制器,如下所示:

[Authorize(Policy = "OnlyEmployees")]

若要查找组的 SID,可以使用 powershell 命令Get-ADGroup -Identity YOUR_GROUP_NAME查询 AD,这将返回组的 SID。

注意:此答案可在此处找到,代码可在此处获得。

最新更新