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 组到角色的主要内容,如果未能解决你的问题,请参考以下文章

带你做 WebAPI 迁移 ASP.NET Core 2.0

ASP.Net Core 2.0 FileTable 使用

ASP.NET Core 2.0 中的多个身份

ASP.NET Core 2.0 : 八.图说管道

ASP.NET CORE 2.0 中的 FromUri

asp.net core 2.0 Json结果的格式