ASP.NET членство API не работает на сервере Win2008 / IIS7 - PullRequest
1 голос
/ 07 июня 2010

У меня очень странная проблема. У меня есть веб-приложение, которое использует API членства .NET для обеспечения функциональности входа в систему.

Это прекрасно работает на моей локальной машине разработчика, используя сервер WebDev 4.0.

Я использую .NET 4.0 с перезаписью некоторых URL, но не на тех страницах, где требуется вход в систему.

У меня Windows Server 2008 с IIS7

Однако, по-видимому, членский API не работает на сервере. Я настроил удаленную отладку, и событие LoginUser.LoggedIn элемента управления LoginUser запускается нормально, но членство пользователя равно нулю. Я не получаю ответа о том, что имя пользователя / пароль недействительны, поэтому он, кажется, распознает его.

Если я введу неверное имя пользователя / пароль, я получу неверный ответ с именем пользователя / паролем.

Код, если это поможет:

<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="validation-error-list" ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
    <fieldset class="login">
        <legend>Account Information</legend>
        <p>
            <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
            <asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
            <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" 
                 CssClass="validation-error" Display="Dynamic" ErrorMessage="User Name is required." ToolTip="User Name is required." 
                 ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
        </p>
        <p>
            <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
            <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
            <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" 
                 CssClass="validation-error" Display="Dynamic" ErrorMessage="Password is required." ToolTip="Password is required." 
                 ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
        </p>
        <p>
            <asp:CheckBox ID="RememberMe" runat="server"/>
            <asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
        </p>
    </fieldset>
    <p class="login-action">
        <asp:Button ID="LoginButton" runat="server" CommandName="Login" CssClass="submitButton" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
    </p>
</div>

и код:

protected void Page_Load(object sender, EventArgs e)
{
    LoginUser.LoginError += new EventHandler(LoginUser_LoginError);
    LoginUser.LoggedIn += new EventHandler(LoginUser_LoggedIn);
}

void LoginUser_LoggedIn(object sender, EventArgs e)
{
    // this code gets run so it appears logins work
    Roles.DeleteCookie(); // this behaviour has been removed for testing - no difference
}

void LoginUser_LoginError(object sender, EventArgs e)
{
    HtmlGenericControl htmlGenericControl = LoginUser.FindControl("errorMessageSpan") as HtmlGenericControl;
    if (htmlGenericControl != null) htmlGenericControl.Visible = true;
}

У меня "Fiddled" с ответом на форму входа, и я получаю следующие заголовки Cookie-Set:

Set-Cookie: ASP.NET_SessionId=lpyyiyjw45jjtuav1gdu4jmg; path=/; HttpOnly
Set-Cookie: .ASPXAUTH=A7AE08E071DD20872D6BBBAD9167A709DEE55B352283A7F91E1066FFB1529E5C61FCEDC86E558CEA1A837E79640BE88D1F65F14FA8434AA86407DA3AEED575E0649A1AC319752FBCD39B2A4669B0F869; path=/; HttpOnly
Set-Cookie: .ASPXROLES=; expires=Mon, 11-Oct-1999 23:00:00 GMT; path=/; HttpOnly

Я не знаю, что здесь полезно, потому что он явно зашифрован, но мне кажется, что файл cookie .APXROLES не имеет значения. Кажется, не удается зарегистрировать cookie, но проходит проверку подлинности.


Обновление:

  1. Пробовал в Классическом и Интегрированном режимах: одинаковое поведение

  2. Пользовательская СЕТЬ СЕРВИСА ASP.NET (NT AUTHORITY / NETWORK SERVICE) имеет членство во всех ролях aspnet_ *.

1 Ответ

0 голосов
/ 25 декабря 2011

убедитесь, что для IIS установлен тип FormSuth в качестве типа безопасности.

. Найдите здесь типы аутентификации: http://learn.iis.net/page.aspx/142/understanding-iis-url-authorization/

...