是否有人使用IIS中的Windows身份验证成功创建了一个ASP.NET Core 2.0应用程序来查询LDAP源(内部AD实例)并将组成员身份放入Roles作为声明以正确加速[Authorize]注释?中间件的文档没有直接解决如何执行此操作或在某些版本的System.DirectoryServices 4.5preview for aspnetcore中的日期。我知道.NET Framework通过System.DirectoryService为我们提供了对组成员身份的本机访问。我的问题是你是否可以尝试使用过滤器而不是中间件,并为组查询LDAP并将其存储为cookie中的声明。有更简单的方法吗?我查询了在Novell.Directory.Ldap标准中工作的LDAP源代码,我可以在适当的地方使用它来迭代。
提前感谢您的建议。
答案 0 :(得分:0)
您可以使用Startup.cs中配置的策略来定义可与Authorize属性一起使用的AD组。但是,您会注意到,必须使用policy.RequireRole("S-1-5-4")
行中的组的SID来代替组名。
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属性装饰控制器,如下所示:
[Authorize(Policy = "OnlyEmployees")]
要查找组的SID,可以使用powershell命令Get-ADGroup -Identity YOUR_GROUP_NAME
查询AD,该命令将返回组的SID。