私はasp.netの承認/メンバーシップに比較的慣れていないので、ばかげたことを聞いたらすみません。.net (stackoverflow、codeproject、devX、および www.asp.net) でカスタム メンバーシップ プロバイダーを実装するための多くの例を見て、それに基づいてコーディングしましたが、どういうわけかそれを機能させることができませんでした。
私の要件 - 私たちの組織は HP の品質センター (QC) を多用しています。また、アプリケーションに登録した QC ユーザーを格納する SQL データベースもあります (パスワードではなく QC ユーザー ID を DB に格納するだけです。パスワード認証は QC API を使用して行われます)。登録済みユーザーの役割を定義するために、DB に user-roles テーブルがあります。
単純な「フォーム認証」の代わりに「メンバーシップ」を使用する理由 - 将来的に QC 認証を切り離したいからです。
それで、これで私は最初のステップから始めました-カスタムメンバーシップクラス(AutoCenterMembershipProviderという名前)とログインページの開発。validateuser メソッドだけが必要です。以下は、私が最初に取ったアプローチです:
1. ユーザーに QC ユーザー ID/パスワードを要求し、ユーザーは [認証] ボタンをクリックします
2. ログイン ページのコード ビハインド - [認証] ボタンの onClick メソッド - ユーザーが SQL データベースにあるかどうかを確認し、見つかった場合は、QC API を使用してユーザー ID-パスワードを認証します
3. ログイン ページの 2 番目のコントロール セットが有効になります。ログインする QC ドメインとプロジェクト ユーザーを選択するようにユーザーに依頼します。ドメインとプロジェクトのドロップダウン リストのオプションも、ユーザー認証後に QC API を使用して取得されます。ユーザーはそれらを選択し、[ログイン] ボタンをクリックします
。 4. [ログイン] ボタンをクリックすると、Membership.ValidateUser(objQCSession.UserName, objQCSession.Password) が呼び出されます。ユーザーは既に QC API を使用して検証されているため、簡単にするために、Membership.ValidateUser のカスタム実装から「true」を返します。次にFormsAuthentication.RedirectFromLoginPage(obj_ACUser.QCSession.UserName, True)
、web.config の app_FAs.aspx で提供されるアプリの既定のページにユーザーを誘導するために呼び出します。
問題は、ユーザーが 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
残りのすべてのメンバーは「実装されていません」
ヘルプ、不足している部分へのポインタ、間違いは大歓迎です、事前に感謝します
ボタンクリックコードの認証
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