この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
フォーム認証に基づくユーザーおよびロール認証...
眺める:
15478
|
答える:
0
[ASP.NET]
FormsAuthenticationに基づくユーザーおよび役割認証
[リンクをコピー]
クズども
掲載地 2018/07/19 17:31:14
|
|
|
通常、アクセス権管理を行う際には、セッションで正しいログイン後にユーザーの基本情報を保存し、今後ユーザーがページやインターフェースデータを要求するたびに取得します
ログインしているかどうか、そして現在のページにアクセスできるかどうかを確認するためのセッションです。
セッションの原則は、サーバー側で保存されたユーザーデータに対応するSessionIDを生成し、そのSessionIDはクッキーに保存され、クライアントはリクエストされるたびにこのIDを持ち続けることです
クッキーの場合、サーバーはクッキー内のセッションIDに基づいてサーバー側に保存されたデータを見つけます。
FormsAuthenticationは、Microsoftが私たち開発者向けに認証に提供しています。 この認証を通じて、ユーザー名や一部のユーザーデータをクッキーに保存できます。
基本的なアイデンティティおよびロール認証は、基本的な条件設定で簡単に実現できます。
ここで達成すべき効果は、メンバーシップを使わずにシステム提供のオーライズを用いてロールベースのアクセス制御を実装することです。
1. チケットを作成する
ユーザーがログインした後、ユーザーのIDと対応する役割(複数ロールの場合は別々)がチケットに保存されます。
チケットをFormsAuthentication.Encryptで暗号化してください。
暗号化されたチケットをレスポンスクッキーに保存します(クライアントのjsはこのクッキーを読み取る必要がないため、ブラウザ攻撃によるクッキーの盗難や偽造を防ぐためにHttpOnly=Trueを設定するのが最善です)。 こうすれば次回はリクエストクッキーから読み取ることができます。
簡単なデモは以下の通りです:
ログインが見えます。
bool isPersistent、//永続化するかどうか(必要に応じて設定、永続化に設定されている場合はクッキー送信時にクッキーの期限設定を設定する必要があります)
FormsAuthenticationTicketの6番目のパラメータは、現在のユーザーの役割IDが格納されているタイプの文字列のuserDataをコンマで区切って格納します。
「test」というユーザー名でログインすると、クライアントにログクッキーが表示されます
2. 認証情報の取得
ログイン後、コンテンツページで現在のリクエストの User.Identity.Name からuname情報を取得するか、リクエスト内のクッキーを復号してチケットを取得し、そこからunameとuserData(以前に保存されていたロールID情報)を取得することもできます。
ログインが見えます。
3. 注釈属性による権限アクセス制御の実現
web.configでフォーム認証およびロール管理を有効にする設定
ログインが見えます。
ControllerとActionに注釈プロパティを追加するとき、Roleというセットはどこで得られるのでしょうか? メンバーシップベースの認証は使わないので、カスタムのRoleProviderも作成します。 名前はCustomRoleProviderで、RoleProviderから引き継いだものです。 こちらはMVCAppのHelperフォルダに自分で作成したCustomRoleProvider.csファイルです。
RoleProviderには多くの抽象的なメソッドがあり、ユーザーロールを取得するためにはGetRolesForUserメソッドのみを実装しています。 ここでのユーザーロールは、取得したユーザーIDやセッション内、またはクッキーに保存されたIDに基づいてデータベースからクエリ可能です。 ここではすでにチケットのuserDataに役割を保存しているので、チケットから取得しましょう。
ログインが見えます。
必要に応じて、検証済みのコントローラーやアクションに注釈属性を追加してください。例えば、このアクションはRoleIDが1、2、3の場合にのみアクセスを許可し、現在のユーザーRoleIDは(7, 1, 8)なので、ユーザーはアクセス権を持っています。
ログインが見えます。
追伸:1. チケットはクッキーの有効期限に保存され、ブラウザを閉じて現在のチケットを記憶している場合、FormsAuthenticationTicketのインスタンス化時にパラメータを設定できます。
2. Roleの取得は、チケットのuserDataに保存されることなくデータベースから直接読み取ることができ、userDataは他の情報を保存できます。
3. コントローラーとアクションの許可アクセスロールを柔軟に設定したい場合は、AuthorizeAttributeオーバーライドでOnAuthorizationメソッドをカスタマイズできます
現在のページで許可されているロールIDを読み取り、現在のユーザーのRoleIDに従って確認してください。 このようにして、役割の柔軟な構成が実現されます。
4. チケット内の情報は最終的にクッキーに保存され、セキュリティは引き続きご自身の裁量に委ねられます。個人的には、UserIDとRoleIDはセッション内に保存する方が良いと思います。
先の:
百度マップ:ポイント集約マーカーのラグ解法を解く
次に:
技術パートナーのリクルート
関連記事
•
ERP Kingdee Cloud Starry Sky (3) 任意のユーザーアカウントへのシングルサインオン
•
.NET 8向けのDockerベースイメージの変更点
•
DiscuzはMicrosoft Clarityという無料のウェブサイト統計分析ツールを使用しています
•
【練習】C#プログラムはクッキーを通じてDiscuzの現在のユーザー情報を復号します
•
/bin/false と /sbin/nologin の違い。/sbin/nologin はユーザーのログインを禁止します
•
DZ3.2異常ログイン検出機能の「凍結」アカウントはバッチごとに解凍されています
•
nginxはユーザーの実際のIPアドレスを取得します
•
Discuzは半年以内にログインしていないユーザーを問い合わせます
•
新しい剣の背景スキャンツール
•
SendCloudの有料ユーザーは一括でメールを送信します
閲覧したセクション
レジャー灌漑
ブロックチェーン
フロントエンドフレーム
HTML/CSS/JavaScript
技術チャット
Windows/Linux
MySQL
ジャワ
C/C++
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com