13,230
回編集
| 501行目: | 501行目: | ||
== 認証 / 認可 == | == 認証 / 認可 == | ||
<code>[Authorize]</code>属性を使用することにより、特定のルートへのアクセスを制限することができる。<br> | <code>[Authorize]</code>属性を使用することにより、特定のルートへのアクセスを制限することができる。<br> | ||
<br> | |||
==== 基本的な認証要求 ==== | |||
<syntaxhighlight lang="c#"> | |||
@page "/secured-page" | |||
[Authorize] | |||
public class SecuredPageBase : ComponentBase | |||
{ | |||
// このページは認証済みユーザーのみアクセス可能 | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 特定のロールに基づく認証 ==== | |||
<syntaxhighlight lang="c#"> | |||
@page "/admin-page" | |||
[Authorize(Roles = "Admin")] | |||
public class AdminPageBase : ComponentBase | |||
{ | |||
// 管理者ロールを持つユーザーのみアクセス可能 | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== 複数のロールの指定 ==== | |||
<syntaxhighlight lang="c#"> | |||
[Authorize(Roles = "Admin,Manager")] | |||
// ポリシーベースの認証 | |||
[Authorize(Policy = "RequireAdminRole")] | |||
// カスタム認証要件 | |||
[Authorize(Policy = "MinimumAgeRequirement")] | |||
</syntaxhighlight> | |||
<br> | |||
==== Program.csでの認証サービスの設定 ==== | |||
<syntaxhighlight lang="c#"> | |||
builder.Services.AddAuthentication().AddCookie(); | |||
builder.Services.AddAuthorization(options => | |||
{ | |||
options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin")); | |||
options.AddPolicy("MinimumAgeRequirement", policy => policy.Requirements.Add(new MinimumAgeRequirement(18))); | |||
}); | |||
</syntaxhighlight> | |||
<br> | |||
==== 認証状態の確認と処理 ==== | |||
<syntaxhighlight lang="c#"> | |||
@inject AuthenticationStateProvider AuthenticationStateProvider | |||
@code { | |||
private async Task<bool> IsUserAuthenticated() | |||
{ | |||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); | |||
return authState.User.Identity.IsAuthenticated; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||