ASP.NET Core 2.0 - Windows Auth 与 LDAP 组到角色
Posted
技术标签:
【中文标题】ASP.NET Core 2.0 - Windows Auth 与 LDAP 组到角色【英文标题】:ASP.NET Core 2.0 - Windows Auth with LDAP Groups into Roles 【发布时间】:2018-05-05 17:52:10 【问题描述】:是否有人在 IIS 中使用 Windows 身份验证成功创建了 ASP.NET Core 2.0 应用程序来查询 LDAP 源(内部 AD 实例)并将组成员身份作为声明放入角色中以正确地为 [Authorize] 注释提供支持?中间件的文档没有直接说明如何执行此操作,或者在一些用于 aspnetcore 的 System.DirectoryServices 4.5preview 版本中过时。我知道 .NET Framework 让我们可以通过 System.DirectoryService 对组成员进行本机访问。我的问题是您是否可以尝试使用过滤器而不是中间件并在 LDAP 中查询组并将其作为声明存储在 cookie 中。有没有更简单的方法来做到这一点?我对在 Novell.Directory.Ldap 标准中工作的 LDAP 源有一个查询,我可以在适当的地方使用它来进行迭代。
提前感谢您的建议。
【问题讨论】:
有人为 asp.net core 2.1 做过这个吗? 你可以看看this和official document。如果您使用 LDAP 查询,您可能会创建自己的策略:请参阅 this question 【参考方案1】:您可以使用在您的 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(Policy = "OnlyEmployees")]
要查找组的SID,可以使用powershell命令Get-ADGroup -Identity YOUR_GROUP_NAME
查询AD,会返回组的SID。
注意:这个答案是在here找到的,代码在here可用。
【讨论】:
以上是关于ASP.NET Core 2.0 - Windows Auth 与 LDAP 组到角色的主要内容,如果未能解决你的问题,请参考以下文章