如何配置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
相关产品推荐
相关产品推荐

