ASP.NET Core 2.0 - 将LDAP组转换为角色的Windows身份验证

dod*_*ard 13 authentication iis active-directory iis-express asp.net-core

是否有人使用IIS中的Windows身份验证成功创建了一个ASP.NET Core 2.0应用程序来查询LDAP源(内部AD实例)并将组成员身份放入角色作为声明以正确地为[授权]注释加油?中间件的文档没有直接解决如何执行此操作或在某些版本的System.DirectoryServices 4.5preview for aspnetcore中的日期.我知道.NET Framework通过System.DirectoryService为我们提供了对组成员身份的本机访问.我的问题是你是否可以尝试使用过滤器而不是中间件,并为组查询LDAP并将其存储为cookie中的声明.有更简单的方法吗?我查询了在Novell.Directory.Ldap标准中工作的LDAP源,我可以在适当的地方使用迭代.

提前感谢您的建议.

zdu*_*dub 0

您可以使用 Startup.cs 中配置的策略来定义可与授权属性一起使用的 AD 组。但是,您会注意到,您必须在行中使用组的 SID,而不是使用组名称policy.RequireRole("S-1-5-4")

    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();
    }
Run Code Online (Sandbox Code Playgroud)

要利用该策略,请使用授权属性装饰您的控制器,如下所示:

[Authorize(Policy = "OnlyEmployees")]
Run Code Online (Sandbox Code Playgroud)

要查找组的 SID,您可以使用 powershell 命令查询 AD Get-ADGroup -Identity YOUR_GROUP_NAME,该命令将返回组的 SID。

注意:这个答案可以在这里找到,代码可以在这里找到。