authentication - ASP.NET Core 2.0 - 将 LDAP 组划分为角色的 Windows 身份验证

标签 authentication iis asp.net-core active-directory iis-express

有没有人使用 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/

相关文章:

php - Mysql Php登录问题

git - 使用用户名和密码克隆 github 的私有(private)仓库

PHP登录系统

jQuery 登录 $.post

php - 跨子域和主机的 Cookie

asp.net - 有没有办法在 .NET Core 1.0 MVC 的 View 中使用授权策略?

linux - .NET Core 和 Kestrel - 部署在 Linux 上的 ASP.NET CORE Web api 应用程序的反向代理 Web 服务器应该是什么?

iis - 将 webApi 部署到 IIS 7 时出现问题 - ManagedPipelineHandler

node.js - iisnode 的权限和请求

c# - 使用 Key Vault 中的 SSL 证书配置 Kestrel