0Pricing
C# Academy · レッスン

クレームベース認可

ユーザーのクレームに基づいて認可します。

「クレームベース認可」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。

ロールの先へ

ロールはクレームの特殊な例です。クレームベースの認可では、ロールだけでなく、メールアドレス、部署、サブスクリプションのティア、権限フラグなど、任意のクレームを使って認可を判断します。

これにより、何十ものロールを作らなくても、より細かな制御が可能になります。

// Claims a user might carry:
// department = sales
// subscription = pro
// email_verified = true

トークンへのクレームの追加

認可ルールで確認するクレームを発行します。クレームは、型と値の組み合わせです。

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim("department", "sales"),
    new Claim("subscription", "pro"),
    new Claim("email_verified", "true")
};

クレームポリシーの定義

クレームベースのルールは、AddAuthorization に登録する名前付きポリシーとして表現します。RequireClaim は、ユーザーが指定されたクレームを持っていることを要求します。

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("VerifiedEmail", policy =>
        policy.RequireClaim("email_verified", "true"));
});

値を指定しない RequireClaim

クレームが存在することだけを確認したい場合(値は任意の場合)は、型だけを指定して RequireClaim を呼び出します。

options.AddPolicy("HasDepartment", policy =>
    policy.RequireClaim("department"));

許可する値を指定する RequireClaim

許可する値を列挙できます。クレームがそのうちいずれかの値と一致すれば、ポリシーは成功します。

options.AddPolicy("PaidTier", policy =>
    policy.RequireClaim("subscription", "pro", "enterprise"));

クレームポリシーの適用

[Authorize] でポリシーを名前で参照します。

[Authorize(Policy = "PaidTier")]
[HttpGet("premium-reports")]
public IActionResult Reports() => Ok();

Minimal API での使用

Minimal API でも、RequireAuthorization を通じて同じポリシー名を参照します。

app.MapGet("/premium-reports", () => Results.Ok())
   .RequireAuthorization("PaidTier");

複数のクレーム要件の組み合わせ

ポリシーには複数の RequireClaim 呼び出しを連結できます。すべてを満たす必要があります(AND)。

options.AddPolicy("VerifiedSales", policy =>
    policy
        .RequireClaim("email_verified", "true")
        .RequireClaim("department", "sales"));

カスタムロジックのための RequireAssertion

固定値のチェックでは不十分な場合、RequireAssertion を使って ClaimsPrincipal に対する任意の述語を実行します。

options.AddPolicy("AdultUser", policy =>
    policy.RequireAssertion(ctx =>
    {
        var dob = ctx.User.FindFirst("birthdate")?.Value;
        return DateTime.TryParse(dob, out var d) &&
               d <= DateTime.UtcNow.AddYears(-18);
    }));

実行時のクレームの読み取り

単に yes/no のゲートとして使うのではなく値が必要な場合は、アクション内でクレームを直接確認することもできます。

var dept = User.FindFirst("department")?.Value;
var isPro = User.HasClaim("subscription", "pro");

クレームとロールの使い分け

大まかな職務にはロールを使用します。属性や機能フラグにはクレームを使用します。両者は組み合わせることができ、1つのポリシーでロールと複数のクレームを同時に要求できます。

options.AddPolicy("SalesManager", policy =>
    policy.RequireRole("manager")
          .RequireClaim("department", "sales"));

クイックチェック

クレームポリシーについての理解度を確認しましょう。

まとめ

クレームベースの認可について学びました。

  • ロールに限らず、任意のクレームでアクセスを制御できます。
  • RequireClaim は、クレームの存在または特定の許可値を確認します。
  • RequireAssertion は、カスタムの述語ロジックを処理します。
  • クレームとロールは、1つの名前付きポリシー内で組み合わせることができます。

次は、完全なポリシーベースモデルです。

よくある質問

「クレームベース認可」レッスンは無料ですか?

はい。「クレームベース認可」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。

「クレームベース認可」で何を学びますか?

ユーザーのクレームに基づいて認可します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「クレームベース認可」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ロールベース認可
  2. クレームベース認可
  3. ポリシーベース認可
  4. カスタム認可要件
← C# Academyに戻る