0

私は利用したいと思います:

        Page.User.IsInRole("CustomRole");
        Page.User.Identity.IsAuthenticated

Page メソッド内で作業する場合、およびweb.configの認証セクション:

<authorization>
    <allow roles="Administrators, Supervisors" />
    <deny users="*" />
</authorization>

また、クラスおよびメソッド レベルでルールを適用します。

[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")] 

私のアプリケーションでは、... HTTP ヘッダーでユーザー ID を提供する ... カスタム メカニズムで認証します。ユーザーのPIN番号(ある種のID)+ロールを取得します。しかし、それはサイド プロットです。それは問題ではありません。

私が実際に達成したいのは、認証機能で ASP .NET ビルドを利用することですが、独自の認証メカニズムを使用することです。IPrincipalIIdentityを実装する必要があると思いますが、そうですか? Web でたくさんのサンプルを見ましたが、それらにはすべて、プロバイダーを指定する web.config 構成と、必要ないと思われるFormsAuthenticationのようなクラスが含まれています。ユーザーオブジェクト(私が準備したもの)をリクエストに挿入するだけで済みます。

そう:

  • それを達成する最も簡単な方法は何ですか?
  • GenericPrincipal / IPrincipal の違いは何ですか?
  • IIdentity オブジェクトを取得/作成する方法は? 私はサンプルを見ました:

    var id = 新しい FormsIdentity(authTicket);

しかし、私は FormsAuthentication を使用していません。

ありがとう

4

2 に答える 2

0

実行する(独自に作成/実装する)前に、Forms認証を既存の認証スキームに適合させることを試み/検討しましたか?

あなたは「ほぼそこにいる」と思います(組み込みのASP.net認証/メンバーシップ/プロファイル/ロールのすべてを使用)。既存の認証スキームをフォーム認証に「プラグイン」する方が簡単/簡単かもしれません。

このコードスニペットは、フォーム認証がいかに柔軟であるかを理解するのに役立ちます。

if ((UserEmail.Text == "jchen@contoso.com") && (UserPass.Text == "37Yj*99Ps"))
{
      FormsAuthentication.RedirectFromLoginPage 
         (UserEmail.Text, Persist.Checked);
}
else
{ ... }

したがって、ハードコードされた「認証スキーム」(そうすべきではありませんが、可能性のアイデアを提供します)、またはweb.configのリストでさえも機能します。これもサンプルです。

<authentication mode="Forms">
  <forms name=".FUBAR">
    <credentials passwordFormat="MD5">
      <user name="foo" password="b7ab5072e8fba7bed20384cc42e96193"/>
      <user name="bar" password="1c42e49a360aa7cc337a268a1446a062"/>
      <user name="john" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
      <user name="jane" password="7c6a180b36896a0a8c02787eeafb0e4c"/>
    </credentials>
  </forms>
</authentication>

ただの考え-hth....

于 2012-06-12T15:19:22.673 に答える
0

つまり、独自の認証モジュールを実装する必要があります。

認証モジュールは単なる ASP.NET モジュールですが、特別な目的があります。そのAuthenticateRequestメソッドはHttpContext.Current.User、プロパティに のインスタンスを設定する必要がありますIPrincipal

他の質問への回答:IPrincipalは単なるインターフェースGenericPrincipalであり、実装の 1 つです。名前が示すように、それは単なる一般的な実装であり、あなたに合ったものであることを意味します。IPrincipalはプラスの役割だけなのでIIdentity、おそらく も必要になるでしょうGenericIdentity

RolePrincipal+などの他の実装は、FormsIdentity特定の目的のために設計されています。たとえば、これら 2 つはフォーム認証モジュールで使用されます。

利用可能ないくつかの良い例があります。「カスタム認証モジュール」をグーグルで検索してください。

于 2012-06-12T10:02:52.960 に答える