LDAP 在 ASP.NET 样板中如何工作?

How does LDAP work in ASP.NET Boilerplate?

我在文档中没有看到任何关于如何:

LDAP/Active目录

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

如果我们想使用LDAP认证,我们首先将Abp.Zero.Ldap nuget包添加到我们的项目中(一般是核心(域)项目)。然后我们应该为我们的应用程序扩展 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 class 定义设置名称的常量。您可以在更改设置(或获取设置)时使用这些常量名称。 LDAP 设置是针对每个租户的(对于多租户应用程序)。因此,不同的租户有不同的设置(请参阅 github 上的设置定义)。

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

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

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

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

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