zukucode
主にWEB関連の情報を技術メモとして発信しています。

ASP.NET jwt認証をすべてのコントローラーにデフォルト設定する

ASP.NETでjwtで認証保護を設定するにはコントローラー全体もしくはメソッドごとに以下のよう設定していると思います。

    [HttpGet]
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public IEnumerable<WeatherForecast> Get()

デフォルトですべてのルートに認証保護を設定したい場合は以下のようにStartup.csに設定します。

Startup.cs(一部抜粋)
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        // すべてのアクセスに対してjwtの認証保護を適用する
        options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build()));
    })

ASP.NET cookie認証をすべてのコントローラーにデフォルト設定するで紹介した方法と異なり、以下のようにAuthorizationPolicyBuilderのパラメータにjwtのスキーマを設定する必要があるので注意が必要です。

Startup.cs(一部抜粋)
options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));
options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme).RequireAuthenticatedUser().Build()));

こうすることにより、すべてルートでjwtの認証保護が有効になります。


関連記事