有没有人使用 IIS 中的 Windows 身份验证成功创建了一个 ASP.NET Core 2.0 应用程序来查询 LDAP 源(内部 AD 实例)并将组成员身份放入 Roles as Claims 以正确地添加 [Authorize] 注释?中间件的文档没有直接说明如何执行此操作,或者在用于 aspnetcore 的 System.DirectoryServices 4.5preview 的某些版本中已过时。我知道 .NET Framework 允许我们通过 System.DirectoryService 本地访问组成员身份。我的问题是您是否可以尝试使用过滤器而不是中间件并查询 LDAP 的组并将其作为声明存储在 cookie 中。有没有更简单的方法来做到这一点?我对使用 Novell.Directory.Ldap 标准的 LDAP 源有一个查询,我可以在适当的地方使用它进行迭代。
预先感谢您的建议。
最佳答案
您可以使用在 Startup.cs 中配置的策略来定义可与授权属性一起使用的 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 属性装饰您的 Controller ,如下所示:
[Authorize(Policy = "OnlyEmployees")]
要查找组的 SID,可以使用 powershell 命令
Get-ADGroup -Identity YOUR_GROUP_NAME
查询 AD。 ,这将返回组的 SID。注意:此答案已找到 here并且代码可用 here .
关于authentication - ASP.NET Core 2.0 - 将 LDAP 组划分为角色的 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47427122/