.NET Core での認証管理分析
0x00 問題の原因
新しい .NET Core Web プロジェクトを作成するときは、[個人ユーザー アカウントを使用する] を選択してユーザーを作成し、権限管理 プロジェクトを作成しますユーザー登録やログインなど多くのページが用意されており、AuthorizeAttributeを使って様々な権限を管理することもでき、とても便利そうです。しかし、生成されたコードが何をするのかわかりません。生成されたデータテーブルを見ると、関数は非常に複雑です。実際には、ユーザーとロールに基づいた認証管理が必要であり、ユーザー情報は既存のライブラリを使用しますが、.NET Core に付属の認証コンポーネントを使用するには EF に依存する必要があり、多くのテーブル構造が一致しないため、学習が必要です。組み込みの認証コンポーネントを実装し、Identity コンポーネントを置き換える独自の認証 サービス を作成しました。同時に、Cookie は組み込みの Cookie ミドルウェア を使用し、認証に AuthorizeAttribute を使用できます。まだ複雑な要件に遭遇したことがないので、ここで学びました。このブログでは、最も単純なケースにおけるユーザーおよびロールベースの認証に焦点を当てます。 .NET Core の組み込み認証コンポーネントの基本的な使用方法については、http://www.php.cn/ を参照してください。
0x01 .NET Core における認証管理
認証管理というと首相が思い浮かべるのは、ユーザーの登録、ログイン、ログアウト、ユーザーのロールの追加削除です。ユーザー情報、ロール情報などはすべてデータベースに保存されます。したがって、これには主に データベース操作 とログイン ビジネス ロジックの 2 つの部分が含まれています。ログイン ビジネス ロジック レベルでは、.NET Core は主に 3 つのコア クラス UserManager、RoleManager、および SigninManager (Microsoft.AspNetCore.Identity アセンブリ内) を通じて管理されます。その中で:
UserManager は主に、ユーザーの認証、登録、変更、削除、ユーザー関連のロール、トークン、クレームなどの管理を担当します。
RoleManager は、ロールとロール関連のステートメントの管理を担当します。
SigninManager は、ログイン、ログアウト、およびその他の関連操作を担当します。ユーザー操作が関係する場合 (ログイン時のユーザー検証など)、操作を実行するために UserManager が呼び出されます。
データベースを操作するとき、これらの 3 つのコア クラスは、データベース レベルで UserStore と RoleStore を使用して操作します (Microsoft.AspNetCore.Identity.EntityFrameworkCore アセンブリ内)。ビジネス上の関係を以下の図に示します。
私たちは、認証関連の機能を開発する際のほとんどのニーズを満たすために、これら 3 つのコア クラスを使用します。これらのコアクラスの オブジェクト を使用する場合、それらは 依存関係の注入 を通じて取得されます。では、これらの関連する依存関係はいつ注入されるのでしょうか。 Startup の ConfigureServices メソッドには AddIdentity 拡張メソッドがあり、必要な依存関係がすべて追加されます。
0x02 ログインとログアウト
Identity コンポーネントの全体的な役割分担を理解した後、ログインとログアウトの操作の詳細をいくつか見てみましょう。 SigninManager は主にログインとログアウトのプロセスを担当します。まずログイン プロセスを見てみましょう。
ログインに成功すると、応答の Header には
-Cookie、Cookie の が含まれます。キー Cookie ミドルウェアに設定されている復号化する Cookie のキーと一致する必要があります。スクリーンショットでは、この Cookie のキーは IdentityCookie です。 Cookie を設定し、ログイン ページへの 302 リダイレクトを返します。
ログイン ページにリダイレクトされると、リクエストにはキーが IdentityCookie に設定された Cookie がすでに含まれています。
ログアウトプロセスは比較的単純です。このとき、HttpContext.Authentication.SignOutAsync メソッドを呼び出してログアウトしますが、その内容は HttpContext.Response に追加されます。は空です。
0x03 Cookie を通じてユーザーを識別する
.NET Core は CookieAuthenticationMiddleware ミドルウェアを使用して HttpContext 内の認証関連の Cookie を識別し、それによって ユーザーの検証および承認情報を追加します。最も重要なのは、ユーザーの認証と承認の情報を記録する ClaimsPrincipal オブジェクトです (もちろん、上記のログイン プロセスからわかるように、成功後のその他の情報も含めることができます)。ログイン、ユーザーの認証および承認情報を ClaimsPrincipal オブジェクトに保存し (実際には、この Cookie のキーと値のペアの認証情報は ClaimsIdentity として保存され、ClaimsPrincipal には複数の ClaimsIdentity を含めることができます)、HttpContext のヘッダーに Set-Cookie を追加します。 .Response、キーは Cookie ミドルウェア内にあります。指定された CookieName と Value は、このオブジェクトの暗号化された string です。将来、HttpContext はこの Cookie を持ち、Cookie ミドルウェアはこの CookieName に一致する Cookie を取り出し、それを復号して ClaimsPrincipal オブジェクトに復元し、HttpContext.User をこのオブジェクトに設定します。その後、MVCミドルウェアが対応するControllerとActionにルーティングするときに、Authorize機能で指定された認証とロールに従ってHttpContext.Userをチェックできます。チェックが満たされない場合はジャンプします。該当ページへ。したがって、Cookie ミドルウェアは MVC ミドルウェアの前に配置する必要があることに注意する必要があります。
ここで ClaimsPrincipal について話す必要があります。 ClaimsPrincipal オブジェクトには 1 つ以上の ClaimsIdentity オブジェクトが含まれます。 ClaimsIdentity オブジェクトは通常、Cookie 内の特定のキーと値のペアに対応します (個人的な理解です)。 Cookie ミドルウェアと ClaimsIdentity は、AuthenticationScheme を通じて接続されます。後で独自の認証サービスを作成するときに、Cookie ミドルウェアの AuthenticationScheme と、作成された ClaimsIdentity との一貫性も確保します。したがって、ClaimsIdentity にはユーザー認証とアクセス許可のクレームが含まれているのに対し、ClaimsPrincipal には複数の ClaimsIdentity を含めることができると言ったほうが正確です。パイプライン内に複数の Cookie ミドルウェアがある場合、それらは AuthenticationScheme によって区別されます。
ClaimsIdentity には、AuthenticationScheme に加えて、UserType と roleType という 2 つの重要な プロパティ があります。ここで、UserType はユーザー検証タイプを指定し、RoleType はロール検証タイプを指定します。これは、RoleType を「RoleName」として指定した場合、ロールの認証中に、Claims で Type「RoleName」のすべての値を検索し、Authorize で指定された RoleName が含まれているかどうかを確認することを意味します。ただし、.NET Core には ClaimTypes が付属しており、直接使用できます。たとえば、ロールの種類は ClaimTypes.Role です。ロールを追加するときに組み込みの ClaimTypes.Role が使用される場合、ClaimsIdentity を作成するときに、RoleType を明示的に指定する必要はありません。デフォルトのロール認証では ClaimTypes.Role が使用されます。
Cookieミドルウェアの追加については、スタートアップのConfigureメソッドのapp.UseIdentity拡張メソッドを通じて実装されます。この拡張メソッドにより、実際にはさまざまな Cookie 識別メソッドが追加されます。後で独自のユーザー認証管理を作成するときに 1 つだけ使用します。
0x04 独自のユーザー認証管理を作成する
ユーザー認証プロセスを理解した後、Identity コンポーネントを置き換える独自の認証管理を作成できます。これもデータベース操作と認証ビジネス ロジックに分かれています。データベースについては多くは言いませんが、データベースはすべて IdentityRepository クラスで記述されており、非常に単純なデータ操作しかありません。便宜上、Dapper を使用し、データベースは Sqlite です。プログラムは起動時にデータベース テーブルをチェックし、チェックされない場合は空のテーブルを自動的に作成します。
認証サービスも比較的単純で、登録とログインの操作を提供するため、アクションに直接記述されます。便宜上、ロール管理ページは提供されていません。ロール認証機能をテストする場合は、データベースにロールを手動で追加してから、UserRoles のユーザーにロールを追加する必要があります。
ログイン:
登録:
ログアウト:
論理的な問題。たとえば、ユーザーのパスワードは次の場所に保存されます。クリアテキスト。プロセスに注目してください:)
0x05 最後に書いています
私はWebアプリケーションに触れるのが初めてで、多くの概念がよくわかりません。 Cookie 認証ユーザーを例に挙げます。私は以前、Cookie を介してユーザーを識別する方法しか知りませんでした。Cookie を受け取った後は、データベースまたは キャッシュ から対応する許可情報を見つける必要があると常に考えていました。しかし、組み込みの Cookie ミドルウェア コードを読んだ後、認証情報は Cookie に直接保存されているため、復号化して逆シリアル化するだけで済むことがわかりました。 Identity アセンブリには他の多くのアセンブリ (セキュリティ、HttpAbstraction など) が含まれているため、最終的には理解できましたが、記事の内容の一部はコードに基づいています。 、個人的な理解に基づいている部分もありますので、間違いがあってもご容赦ください。
以上が.NET Core 認定管理分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

C#.NETは、その強力なエコシステムと豊富なサポートのため、マイクロサービスを構築するために人気のある選択肢です。 1)asp.netcoreを使用してRestfulapiを作成して、順序の作成とクエリを処理します。 2)GRPCを使用して、マイクロサービス間の効率的な通信を実現し、注文サービスを定義および実装します。 3)Dockerコンテナ化されたマイクロサービスを介して展開と管理を簡素化します。

C#および.NETのセキュリティベストプラクティスには、入力検証、出力エンコード、例外処理、認証と承認が含まれます。 1)正規表現または組み込みのメソッドを使用して入力を検証して、悪意のあるデータがシステムに入るのを防ぎます。 2)XSS攻撃を防ぐための出力エンコード、httputility.htmlencodeメソッドを使用します。 3)例外処理により、情報の漏れが回避され、エラーが記録されますが、詳細情報はユーザーに返されません。 4)ASP.Netidentityおよび請求に基づく許可を使用して、不正アクセスから申請を保護します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
