Я относительно новичок в авторизации/членстве в asp.net, поэтому прошу простить, если я попрошу что-нибудь глупое. Я рассматривал множество примеров для внедрения пользовательского поставщика членства в .net (в stackoverflow, codeproject, devX и www.asp.net) и закодирован на основе этого, но каким-то образом не мог заставить его работать.
Мое требование - наша организация в значительной степени использует центр качества HP (QC), я разрабатываю приложение asp.net, его страница входа будет использовать QC'a API для аутентификации пользователя. У меня также есть база данных SQL, в которой я буду хранить пользователей QC, которые зарегистрировались в моем приложении (просто сохраните идентификатор пользователя QC в базе данных, а не пароль, как я уже сказал, аутентификация пароля выполняется с использованием QC API). В моей БД будет таблица пользовательских ролей для определения ролей для зарегистрированных пользователей.
Зачем использовать «членство» вместо простой «проверки подлинности форм» - потому что, возможно, в будущем я хочу отделить проверку подлинности QC.
Итак, с этим я начал с первого шага - разработка пользовательского класса членства (с именем AutoCenterMembershipProvider) и страницы входа. Мне нужен только метод validateuser. Ниже приведен подход, который я предпринял для начала:
1. Запросите у пользователя идентификатор/пароль пользователя QC, пользователь нажмет кнопку «Authenticate»
2. код страницы входа за кнопкой «Проверка подлинности» onClick - проверяет, найден ли пользователь в базе данных SQL и, если она найдена, затем использует QC API для аутентификации идентификатора пользователя.
3. Включен второй набор элементов управления на странице входа в систему - попросите пользователя выбрать, какой пользователь QC Domain и Project должен войти в систему. Варианты выпадающих списков домена и проекта также получены с помощью QC API после аутентификации пользователя. Пользователь выбирает эти кнопки и нажимает кнопку входа
4. Нажмите кнопку «Войти в систему» - вызывается Memberhip.ValidateUser (objQCSession.UserName, objQCSession.Password). Поскольку пользователь уже проверен с помощью QC api, для простоты я просто возвращаю 'true' из моей пользовательской реализации Memberhip.ValidateUser. Затем я звоню - FormsAuthentication.RedirectFromLoginPage(obj_ACUser.QCSession.UserName, True)
, чтобы направлять пользователя по умолчанию по умолчанию, указанную в web.config's - app_FAs.aspx.ASP.net Пользовательское членство поверх авторизации центра качества
Проблема: после того, как пользователь перенаправлен на страницу app_FAs.aspx, он направляет пользователя обратно на страницу входа. Я пытаюсь выяснить ошибку или недостающую часть.
Web.config выглядит следующим образом:
<authentication mode="Forms">
<forms loginUrl="~\Pages\Login.aspx" defaultUrl="App_FAs.aspx"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<membership defaultProvider="AutoCenterMembershipProvider">
<providers>
<clear/>
<add name="AutoCenterMembershipProvider"
type="CustomMembership.Models.AutoCenterMembershipProvider"
enablePasswordRetrieval="false" enablePasswordReset="false"
requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="100" minRequiredPasswordLength="100"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="100" applicationName="/" />
</providers>
</membership>
и класс customMembership, как:
Public Class AutoCenterMembershipProvider
Inherits System.Web.Security.MembershipProvider
Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
Return True
End Function
остальных все члены 'Не реализованы'
любой помощи, указатели на недостающую часть , ошибка приветствуется, заранее спасибо
Аутентификация bu tton нажмите код
Private Sub btn_Authenticate_Click(ByVal sender as Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_Authenticate.click
objQCSession = Session("QCUserSession")
If Membership.ValidateUser(objQCSession.UserName, objQCSession.Password) then
FormaAuthentication.RedirectFromLoginPage(objQCSession.UserName, True)
End if
End Sub
Я просто хочу прояснить несколько вещей. В принципе, у вас есть два шага входа. 1-й шаг не использует членский провайдер, а проверяет его с помощью обычного метода. Поставщик членства в 2-м шаге, который в основном фиктивный, потому что 'ValidateUser' всегда возвращает' true'. Не могли бы вы также отправить сообщение «Событие click для проверки подлинности» и метод, называемый «RedirectFromLoginPage». – Win
Вы правы, членство.validateuser вызывается на 2-м шаге, который является просто фиктивным. Добавлен код щелчка кнопки «Проверить подлинность» выше. – kkap