How does LDAP work in ASP.NET Boilerplate?

时间:2017-09-11 13:16:04

标签: authentication configuration active-directory ldap aspnetboilerplate

I don't see anything in the documentation on how to:

  • connect to LDAP and
  • set controls for user access based on AD Group.

1 个答案:

答案 0 :(得分:1)

LDAP / Active Directory

LdapAuthenticationSource是外部身份验证的一种实现,可以让用户使用他们的LDAP(活动目录)用户名和密码登录。

如果我们想使用LDAP身份验证,我们首先将Abp.Zero.Ldap nuget包添加到我们的项目(通常是Core(域)项目)。然后我们应该为我们的应用程序扩展LdapAuthenticationSource,如下所示:

public class MyLdapAuthenticationSource : LdapAuthenticationSource<Tenant, User>
{
    public MyLdapAuthenticationSource(ILdapSettings settings, IAbpZeroLdapModuleConfig ldapModuleConfig)
        : base(settings, ldapModuleConfig)
    {
    }
}

最后,我们应该为AbpZeroLdapModule设置一个模块依赖项,并使用上面创建的auth源启用LDAP:

[DependsOn(typeof(AbpZeroLdapModule))]
public class MyApplicationCoreModule : AbpModule
{
    public override void PreInitialize()
    {
        Configuration.Modules.ZeroLdap().Enable(typeof (MyLdapAuthenticationSource));    
    }

    ...
}

完成这些步骤后,将为您的应用程序启用LDAP模块。但默认情况下不启用LDAP身份验证。我们可以使用设置启用它。 设置

LdapSettingNames类定义设置名称的常量。您可以在更改设置(或获取设置)时使用这些常量名称。 LDAP设置是每个租户(适用于多租户应用程序)。因此,不同的租户有不同的设置(请参阅github上的设置定义)。

正如您在MyLdapAuthenticationSource构造函数中看到的,LdapAuthenticationSource期望ILdapSettings作为构造函数参数。此接口用于获取LDAP设置,如域,用户名和密码,以连接到Active Directory。默认实现(LdapSettings类)从设置管理器获取这些设置。

如果您使用设置管理器,那么没问题。您可以使用设置管理器API更改LDAP设置。如果需要,可以将初始/种子数据添加到数据库以默认启用LDAP身份验证。

注意:如果您没有定义域,用户名和密码,如果您的应用程序在具有适当权限的域中运行,则LDAP身份验证适用于当前域。 自定义设置

如果要定义另一个设置源,可以实现自定义ILdapSettings类,如下所示:

public class MyLdapSettings : ILdapSettings
{
    public async Task<bool> GetIsEnabled(int? tenantId)
    {
        return true;
    }

    public async Task<ContextType> GetContextType(int? tenantId)
    {
        return ContextType.Domain;
    }

    public async Task<string> GetContainer(int? tenantId)
    {
        return null;
    }

    public async Task<string> GetDomain(int? tenantId)
    {
        return null;
    }

    public async Task<string> GetUserName(int? tenantId)
    {
        return null;
    }

    public async Task<string> GetPassword(int? tenantId)
    {
        return null;
    }
}

并在模块的PreInitialize中将其注册到IOC:

[DependsOn(typeof(AbpZeroLdapModule))]
public class MyApplicationCoreModule : AbpModule
{
    public override void PreInitialize()
    {
        IocManager.Register<ILdapSettings, MyLdapSettings>(); //change default setting source
        Configuration.Modules.ZeroLdap().Enable(typeof (MyLdapAuthenticationSource));
    }

    ...
}

然后您可以从任何其他来源获取LDAP设置。

https://aspnetboilerplate.com/Pages/Documents/Zero/User-Management#ldapactive-directory