2

SQL データベースを指すフォーム認証を使用できるようにする、または Web アプリのさまざまなインストールで統合認証を使用できるようにする Web アプリケーションを作成しています。どちらのプロバイダーでも問題なくユーザーを認証していますが、データベースの設計方法について質問があります。

現在私がやっていることは、コードを使用することです:

public static string UserID
{
  get
  {
     if (HttpContext.Current.User.Identity.AuthenticationType == "Forms")
     {
       //using database auth
       return Membership.GetUser().ProviderUserKey.ToString();
     }
     else
     {
       //using integrated auth
       return HttpContext.Current.Request.LogonUserIdentity.User.ToString();
     }
   }
 }

次に、返されたキー (プロバイダーによっては、aspnetdb データベースのユーザー ID または Windows SID) を、作成するアイテムのユーザー ID として使用します。ユーザー ID フィールドは、データベース内のユーザー テーブルとは関係ありませんが、あなたが伝統的に行うように。

これについてもっと良い方法はありますか?UserID (内部) と ExternalID (Windows SID または aspnetdb からの ID を格納する) の 2 つのフィールドを持つユーザー テーブルを作成し、アプリケーション全体で内部 UserID を使用することを考えましたが、メンバーシップはそれほどきれいではありません。 C# のクラス。

統合認証と FBA を切り替えることができるアプリはたくさんあるようですが (Sharepoint 2007 が最初に思い浮かびます)、ソリューションの構築方法に関する適切なチュートリアルが Web 上に見つかりませんでした。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

2 つの異なるメンバーシップ プロバイダー (特に LogonUserIdentify を使用する代わりに、Windows とフォーム) を使用しないのはなぜですか? 投稿したコード例では、任意のプロバイダーのメンバーシップ名前空間で同じメソッドを使用できます。Web.config ファイルで既定のプロバイダーを変更できます。「統合認証」に固有のコードを使用することはクリーンではないことに同意します。次に例を示します。

<membership defaultProvider="1">
 <providers>
  <clear/>
  <add name="1" ... />
  <add name="2" ... />
 </providers>
</membership>

次に、defaultProvider を変更します。メンバーシップを処理する ASP.NET コントロール (ログイン コントロールなど) には、メンバーシップ プロバイダーを選択できるプロパティがあります。つまり、プログラムで選択できます。

ユーザー ID はプロバイダーのコンテキストでのみ関連するため、「内部」ユーザー名を使用する必要はないように思われます。プロバイダー名と外部ユーザー ID を使用してください (同じユーザー ID が複数のプロバイダーに存在する可能性があるため)。 .

通常、独自のユーザー ID を作成する必要はありません。これは、ASP.NET プロバイダーがバックグラウンドで処理するためです。たとえば、ASP.NET プロファイル プロバイダーを使用すると、ユーザーの認証に使用されたメンバーシップ プロバイダーに関係なく、ユーザーごとのプロファイル情報が得られます。

于 2008-09-15T21:54:39.777 に答える