ポリシーベース認可
再利用可能な認可ポリシーを定義します。
「ポリシーベース認可」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
ポリシーモデル
ASP.NET Core では、すべての認可チェックが最終的にポリシーを通じて実行されます。ロールやクレームの属性は、内部でポリシーを構築するための省略記法です。
名前付きポリシーを定義すると、ルールを一元管理でき、コントローラーをすっきり保てます。
[Authorize(Policy = "CanManageOrders")]AddAuthorization
AddAuthorization を使って、サービスコンテナーにポリシーを登録します。各ポリシーには一意の名前を付けます。
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CanManageOrders", policy =>
policy.RequireRole("admin", "sales"));
});RequireAuthenticatedUser
最も基本的な要件は、ユーザーがサインイン済みであることです。RequireAuthenticatedUser は匿名の呼び出し元を拒否します。
options.AddPolicy("SignedIn", policy =>
policy.RequireAuthenticatedUser());要件の組み合わせ
ポリシービルダーでは複数の要件を連結できます。すべての要件を満たした場合にのみ、ポリシーは成功します。
options.AddPolicy("SeniorEditor", policy =>
policy
.RequireAuthenticatedUser()
.RequireRole("editor")
.RequireClaim("seniority", "senior"));デフォルトポリシー
引数のない [Authorize] はデフォルトポリシーを使用します。標準では認証済みユーザーであることだけを要求しますが、置き換えることもできます。
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireClaim("email_verified", "true")
.Build();フォールバックポリシー
フォールバックポリシーは、認可属性がまったくないエンドポイントに適用されます。デフォルトで安全な状態にするための強力な方法です。
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
// Now every endpoint requires auth unless marked [AllowAnonymous]AllowAnonymous による除外
フォールバックポリシーですべてを保護する場合は、[AllowAnonymous] を使って、ログインやヘルスチェックなどの公開エンドポイントを例外にします。
[AllowAnonymous]
[HttpGet("health")]
public IActionResult Health() => Ok("healthy");エンドポイントへのポリシーの適用
属性または Minimal API の拡張メソッドで、ポリシーを名前で参照します。
// Controller
[Authorize(Policy = "SeniorEditor")]
public IActionResult Publish() => Ok();
// Minimal API
app.MapPost("/publish", () => Results.Ok())
.RequireAuthorization("SeniorEditor");エンドポイントのグループ化
ルートグループ全体にポリシーを適用すると、グループ内のすべてのエンドポイントがそのポリシーを継承します。
var admin = app.MapGroup("/admin")
.RequireAuthorization("CanManageOrders");
admin.MapGet("/stats", () => Results.Ok());
admin.MapDelete("/{id}", (int id) => Results.NoContent());内部での要件の処理
各 Require* 呼び出しは、ポリシーに IAuthorizationRequirement を追加します。対応するハンドラーが各要件を評価します。組み込みの要件ではこれが自動的に行われますが、カスタムルールにはカスタムハンドラーが必要です(次のレッスンで扱います)。
// RequireRole("admin") adds a RolesAuthorizationRequirement
// RequireClaim(...) adds a ClaimsAuthorizationRequirementポリシーを定義する場所
すべてのポリシー定義を1つの拡張メソッドにまとめると、見つけやすく、テストしやすくなります。
public static IServiceCollection AddAppPolicies(
this IServiceCollection services)
{
services.AddAuthorization(o =>
{
o.AddPolicy("SignedIn", p => p.RequireAuthenticatedUser());
o.AddPolicy("CanManageOrders", p => p.RequireRole("admin"));
});
return services;
}クイックチェック
デフォルトポリシーとフォールバックポリシーについての理解度を確認しましょう。
まとめ
ポリシーベースの認可について学びました。
AddPolicyは、名前付きで再利用可能なルールを定義します。RequireAuthenticatedUser、RequireRole、RequireClaimは AND の意味で組み合わせられます。- DefaultPolicy は引数のない
[Authorize]を支え、FallbackPolicy は明示的な認可設定のないエンドポイントを保護します。 [AllowAnonymous]でポリシーの適用対象から除外できます。
次は、カスタム認可要件とハンドラーです。
よくある質問
「ポリシーベース認可」レッスンは無料ですか?
はい。「ポリシーベース認可」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「ポリシーベース認可」で何を学びますか?
再利用可能な認可ポリシーを定義します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ポリシーベース認可」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。