ABP实战--集成Ladp/AD认证

  参照Hunter的ABP-Zero模块中用户管理部分。

  由于我们公司的各系统基本都是AD帐号登录的,所以我们需扩展ABP的AuthenticationSource。

  • 添加MyLdapAuthenticationSource.cs及MyLdapSettings.cs

  Core层的Authorization目录下新建Ldap目录,并新建两个MyLdapAuthenticationSource.csMyLdapSettings.cs,代码如下:

  MyLdapAuthenticationSource.cs

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

  

  LdapAuthenticationSource的构造函数需要两个参数:ILdapSettings及IAbpZeroLdapModuleConfig,我们构造自己的MyLdapSettings:

  MyLdapSettings.cs

public class MyLdapSettings : ILdapSettings
    {
        private const string DomainName = "XXXX.com";
        private const string Container = "OU=XXX,DC=XXXX,DC=com";
        private const string UserName = "XXXX";
        private const string Password = "XXXX";
        private const string ADPath = "LDAP://XXXXX";

        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 Container;
        }

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

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

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

  

  • 在CoreModule中启用

  这里ILdapSettings我们使用MyLdapSettings来注册,但是IAbpZeroLdapModuleConfig使用默认的即可。

[DependsOn(typeof(AbpZeroCoreModule))]
    public class CeciCoreModule : AbpModule
    {
        public override void PreInitialize()
        {
            Configuration.Auditing.IsEnabledForAnonymousUsers = true;

            IocManager.Register<IAbpZeroLdapModuleConfig, AbpZeroLdapModuleConfig>();
            IocManager.Register<ILdapSettings, MyLdapSettings>(); //change default setting source
            Configuration.Modules.ZeroLdap().Enable(typeof(MyLdapAuthenticationSource));
  •  重载认证逻辑

  目前我们只使用了Ldap最简逻辑,如需要复杂逻辑(如从AD中获得用户部门职位等),需重载LdapAuthenticationSource的方法来自定义实现。

  

猜你喜欢

转载自www.cnblogs.com/ceci/p/9263700.html