0

私は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
4

1 に答える 1

0

現在、2 番目のステップ -btn_Authenticate_Click方法 1 - はFormAuthenticationTicket、Cookie に割り当て、ユーザーをapp_FAs.aspxページにリダイレクトするだけです。カスタム メンバーシップ プロバイダーの機能は実際には必要ありません。

あなたの問題を正しく理解していれば、このようにロジックを変更します。

1) QC 用にユーザーを検証した後FormAuthenticationTicket、同じ方法でこのように作成します。

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

2) btn_Authenticate_Click(何かをして) ユーザーをリダイレクトするapp_FAs.aspx

カスタム メンバーシップ プロバイダーも必要ありません。カスタム メンバーシップ プロバイダーを使用する場合は、1 番目のステップで実装できます (2 番目のステップでは実装できません)。

于 2013-03-29T18:29:01.227 に答える