我正在为以下配置创建一个网站:-公众网站—用户需要对active directory进行认证角色由第三方ERP系统提供服务,也使用AD进行身份验证
我做了什么因此,我尝试按照本指南(https://our.umbraco.org/wiki/how-tos/membership-providers/active-directory-membership-provider)进行身份验证,并为ERP角色编写了一个自定义角色提供程序。我使用了内置的登录表单模板。
角色部分工作得很好。
看起来Umbraco仍然在使用umbracombershipprovider。当我在umbraco中创建一个成员时,我可以使用umbraco凭据登录。当我尝试任何AD帐户时,它不会验证。
I tried to将LDAP连接字符串更改为使用不存在的OU或CN。它给了我错误,所以连接到AD是在进程的某个地方。
我也尝试了RB.ActiveDirectoryProviders。相同的结果。
我没有得到任何异常抛出,只是"无效的用户名或密码"。日志显示:
2015-08-19 08:45:20,764 [126] INFO Umbraco.Core.Security.UmbracoMembershipProviderBase - [P6460/T133/D8] Login attempt failed for username nico from IP address ::1, the user does not exist
我最好的猜测是我做了一些配置错误。
那么我如何使用Active Directory仅作为MembershipProvider?
欢迎任何帮助。
我设置:
本地盒子,iis/umbraco/VS2012运行一个带有AD的虚拟PC。我在Visual Studio/IISExpress中运行Umbraco 7.2.8。我使用了Umbraco的Nuget包。
web . config
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://192.168.2.50/dc=XXX,dc=YYY" />
</connectionStrings>
<membership defaultProvider="ADMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="UmbracoMembershipProvider" type="Umbraco.Web.Security.Providers.MembersMembershipProvider, Umbraco" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" useLegacyEncoding="true" enablePasswordRetrieval="false" enablePasswordReset="true"
requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Member" passwordFormat="Hashed" />
<add name="UsersMembershipProvider" type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" useLegacyEncoding="true" enablePasswordRetrieval="false" enablePasswordReset="true"
requiresQuestionAndAnswer="false" passwordFormat="Hashed" />
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnectionString" connectionUsername="[USER]" connectionPassword="[PASSWORD]"
attributeMapUsername="sAMAccountName" />
</providers>
</membership>
@using (Html.BeginUmbracoForm<UmbLoginController>("HandleLogin"))
{
<fieldset>
<legend>Login</legend>
@Html.ValidationSummary("loginModel", true)
@Html.LabelFor(m => loginModel.Username)
@Html.TextBoxFor(m => loginModel.Username)
@Html.ValidationMessageFor(m => loginModel.Username)
<br />
@Html.LabelFor(m => loginModel.Password)
@Html.PasswordFor(m => loginModel.Password)
@Html.ValidationMessageFor(m => loginModel.Password)
<br />
<button>Login</button>
</fieldset>
}
经过几个小时的搜索,我终于解决了这个问题。看起来umlogincontroller总是使用umbracommembershipprovider。在我看来这是不透明的。
无论如何,我创建了一个新的表面控制器,就像这里提到的,现在一切都很好。