ASP.NET Core での複数の JWT トークン発行者のサポート
このガイドでは、Firebase やカスタム発行者などの複数のソースからの JWT を認証するように ASP.NET Core を構成する方法について説明します。 標準の AddJwtBearer
メソッドは単一の機関のみをサポートするため、これが共通の課題となります。
解決策: 複数の認証スキーム
重要なのは、ASP.NET Core 内で複数の認証スキームを利用することです。 これにより、アプリケーションはさまざまな発行者からの JWT を個別に処理できるようになります。
実装 (ASP.NET Core 2 以降):
services .AddAuthentication() // No default scheme specified .AddJwtBearer("Firebase", options => { options.Authority = "https://securetoken.google.com/my-firebase-project"; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "my-firebase-project", ValidateAudience = true, ValidAudience = "my-firebase-project", ValidateLifetime = true }; }) .AddJwtBearer("Custom", options => { // Configure validation parameters for your custom JWT issuer here. // Example: options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "your-custom-issuer", ValidateAudience = true, ValidAudience = "your-api-audience", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key")) // Or your key retrieval method }; }); services .AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddAuthenticationSchemes("Firebase", "Custom") .Build(); });
主な改善点:
AddAuthentication()
はパラメータなしで呼び出されます。これにより、単一スキームによる自動認証が防止され、定義されたすべてのスキームが認証を試行できるようになります。AddJwtBearer
は、各発行者を個別に登録するためにスキーム名 (「Firebase」、「Custom」) とともに使用されます。エラーの処理:
認証の失敗中に IDX10501
エラーが発生する可能性があります。これは多くの場合、認証ミドルウェアが各スキームを順番にチェックすることが原因です。 多くの場合、このエラーは無視しても問題ありません。
ASP.NET Core 6 以降:
新しいバージョンでは、デフォルトの認証スキームが必要です。 適応された例は次のとおりです:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Audience = "your-api-audience"; options.Authority = "your-identity-server-url"; // Or your default JWT issuer }) .AddJwtBearer("AzureAD", options => { options.Audience = "your-api-audience"; options.Authority = "your-azure-ad-authority"; }); builder.Services.AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder( JwtBearerDefaults.AuthenticationScheme, "AzureAD") .RequireAuthenticatedUser() .Build(); });
"my-firebase-project"
、"your-custom-issuer"
、"your-secret-key"
、"your-api-audience"
、"your-identity-server-url"
、"your-azure-ad-authority"
などのプレースホルダーを実際の値に置き換えてください。 運用環境では、より堅牢なキー管理の使用を検討してください。 ポリシーベースの認可により、複雑なシナリオに対してよりきめ細かい制御が可能になります。
以上が複数の JWT トークン発行者 (Firebase やカスタム発行者など) をサポートするように ASP.NET Core を構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。