Umbraco未针对Active Directory进行身份验证

时间:2015-08-18 18:31:01

标签: authentication active-directory umbraco umbraco7

我正在为以下配置创建一个互联网网站:   - 公共网站   - 用户需要对再次活动目录进行身份验证   - 角色由第三方ERP系统控制,也使用AD进行身份验证

我做了什么 因此,我尝试按照本指南(https://our.umbraco.org/wiki/how-tos/membership-providers/active-directory-membership-provider)进行身份验证,并为ERP角色编写了一个custsom角色提供程序。我使用内置模板登录表单。

角色部分工作正常。身份验证不会。

问题 似乎Umbraco仍在使用UmbracoMembershipProvider。当我在umbraco中创建一个成员时,我可以使用umbraco凭据登录。当我尝试任何AD帐户时,它不会进行身份验证。

我试图 更改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?

欢迎任何帮助。

我的设置

使用AD运行虚拟PC的iis / umbraco / VS2012本地包装盒。我在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>  
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

经过几个小时的搜索,我终于解决了这个问题。似乎UmbLoginController总是使用UmbracoMembershipProvider。这在我看来并不透明。

无论如何,我创建了一个像here这样的新表面控制器,现在一切正常。