2013-03-29 2 views
0

Я относительно новичок в авторизации/членстве в 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 
+0

Я просто хочу прояснить несколько вещей. В принципе, у вас есть два шага входа. 1-й шаг не использует членский провайдер, а проверяет его с помощью обычного метода. Поставщик членства в 2-м шаге, который в основном фиктивный, потому что 'ValidateUser' всегда возвращает' true'. Не могли бы вы также отправить сообщение «Событие click для проверки подлинности» и метод, называемый «RedirectFromLoginPage». – Win

+0

Вы правы, членство.validateuser вызывается на 2-м шаге, который является просто фиктивным. Добавлен код щелчка кнопки «Проверить подлинность» выше. – kkap

ответ

0

Currenlty, второй шаг - btn_Authenticate_Click метод 1 - это просто присвоить FormAuthenticationTicket для печенья, и перенаправляет пользователя на app_FAs.aspx странице. Ему не нужны функции пользовательского членства.

Если я правильно понимаю вашу проблему, я бы изменил логику следующим образом.

1) После проверки пользователя для контроля качества создайте FormAuthenticationTicket следующим образом одним и тем же способом.

FormsAuthentication.SetAuthCookie("UserName", true|false); 

2) btn_Authenticate_Click (что-то делает и) перенаправляет пользователя на app_FAs.aspx

Вам даже не нужно пользовательского поставщика членства. Если вы хотите использовать Custom Membership Provider, вы можете реализовать его на первом шаге (не на втором шаге).

+0

спасибо Win. Я понимаю, что мне лучше с FormsAuthentication. Я думал об использовании членства, потому что, как я уже сказал, возможно, в будущем я хочу отделить проверку подлинности QC и реализовать свои собственные. Поэтому я считаю, что вы предлагаете что-то вроде: я реализую эту фиктивную аутентификацию на первом этапе, а затем внутри «If Membership.ValidateUser (User, Pass)», я готовлюсь к 2-му шагу; а затем на 2-х шагах аутентификации нажмите, просто используйте FormsAuthentication.SetAuthCookie («UserName», true | false)? – kkap

+0

На данный момент вы можете отказаться от поставщика членства; это не является хорошей практикой для реализации поставщика фиктивного членства, который всегда проверяет правильность «истины». Поэтому я просто добавлю «FormsAuthentication.SetAuthCookie» к шагу 2 (или вы даже можете добавить к шагу 1 на данный момент и перенести его на второй шаг после разрыва). – Win

+0

спасибо, угадайте, что вы правы, не стоит беспокоиться о будущей развязке. спасибо, будет использовать FormsAuthentication на данный момент – kkap