You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置UmbracoIdentity对接本地Active Directory实现Umbraco内网站点的成员登录

Umbraco 8 + UmbracoIdentity 对接本地Active Directory成员登录配置指导

我来帮你梳理下对接本地AD实现成员登录的具体配置步骤,针对你提出的4个疑问逐一解答:


1. UmbracoIdentityOwinStartup.cs 中 ConfigureUmbracoUserManager 方法的配置

这里的核心是让UmbracoIdentity的用户管理器使用AD来验证用户身份,你需要在ConfigureUserManagerForUmbracoMembers的委托中配置AD相关的验证逻辑。

首先,借助System.DirectoryServices.AccountManagement命名空间处理AD用户的查找与密码验证,示例代码如下:

app.ConfigureUserManagerForUmbracoMembers<UmbracoApplicationMember>(
    app.GetUmbracoOwinContext(),
    (options, context) =>
    {
        // 适配AD用户名规则:允许非字母数字、不需要唯一邮箱
        options.UserValidator = new UserValidator<UmbracoApplicationMember, int>(new UserManager<UmbracoApplicationMember, int>(new ADMemberStore()))
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = false
        };

        // 替换默认密码验证器为AD密码验证逻辑
        options.PasswordValidator = new ADMembershipPasswordValidator();
    });

其中两个自定义类需要你实现:

  • ADMemberStore:实现IUserStore<UmbracoApplicationMember, int>接口,核心完成从AD中查找用户的逻辑(比如FindByNameAsync方法)
  • ADMembershipPasswordValidator:实现IPasswordValidator<UmbracoApplicationMember>接口,通过PrincipalContext.ValidateCredentials方法完成AD密码验证。

2. Web.config 中 Membership Provider 的配置

不需要修改UmbracoIdentity.IdentityEnabledMembersMembershipProvider这个类型字符串,它的作用是适配Umbraco成员系统与AspNet Identity框架,只需调整参数匹配AD逻辑:

<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
  <providers>
    <clear />
    <add name="UmbracoMembershipProvider" 
         type="UmbracoIdentity.IdentityEnabledMembersMembershipProvider, UmbracoIdentity" 
         minRequiredNonalphanumericCharacters="0" 
         minRequiredPasswordLength="1" <!-- AD密码规则由AD本身控制,此处设为1即可 -->
         useLegacyEncoding="false" 
         enablePasswordRetrieval="false" <!-- AD不允许从应用端获取密码 -->
         enablePasswordReset="false" <!-- 密码重置需在AD内操作 -->
         requiresQuestionAndAnswer="false" 
         defaultMemberTypeAlias="Member" 
         passwordFormat="Clear" <!-- 密码验证交给AD,无需本地存储加密密码 -->
         allowManuallyChangingPassword="false" />
  </providers>
</membership>

3. umbracoSettings.config 中 Security 节点的配置

主要调整身份验证与成员登录相关设置,避免和Umbraco内置验证冲突:

<security>
  <!-- 测试阶段保留本地登录,AD验证正常后再关闭 -->
  <membership>
    <disableLocalLogin>false</disableLocalLogin>
  </membership>
  
  <!-- 让Owin全权处理身份验证,Umbraco不接管 -->
  <authentication>
    <mode>None</mode>
  </authentication>
  
  <!-- 若不需要外部登录提供商,保持默认空配置即可;你要的是直接凭据登录,无需额外配置外部提供商 -->
  <externalLoginProviders>
    <providers />
  </externalLoginProviders>
</security>

同时要确保Web.config中<system.web><authentication mode="None" />已设置,彻底禁用ASP.NET传统身份验证。


4. UmbracoApplicationMember.cs 中自定义用户声明的配置

如果只是实现基础AD登录,当前不需要添加自定义声明。但如果需要从AD同步用户额外属性(比如部门、职位),可以在GenerateUserIdentityAsync方法中补充:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<UmbracoApplicationMember, int> manager)
{
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
    
    // 从AD同步用户部门信息作为自定义声明
    using (var adContext = new PrincipalContext(ContextType.Domain))
    {
        var adUser = UserPrincipal.FindByIdentity(adContext, this.UserName);
        if (adUser != null && !string.IsNullOrEmpty(adUser.Department))
        {
            userIdentity.AddClaim(new Claim("Department", adUser.Department));
        }
    }
    
    return userIdentity;
}

这一步属于可选扩展,基础登录场景可暂时忽略。


额外注意事项

  • 确保开发服务器已加入AD域,或在自定义ADMemberStore中配置了正确的AD连接凭据(指定域名与有权限查询AD的账号)
  • 先编写独立测试代码验证AD用户名密码的有效性,再集成到UmbracoIdentity中,排查问题更高效
  • 升级UmbracoIdentity到7.2版本前,先备份现有配置,查看版本日志确认AD适配逻辑是否有变化
  • 后续若要扩展到后台用户登录,配置逻辑类似,但需针对UmbracoApplicationUser(而非成员)进行AD验证配置

内容的提问来源于stack exchange,提问作者OtterLogic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:39:09