CA5405: デリゲートでトークンの検証が常にスキップされるようにしないでください
プロパティ | 値 |
---|---|
ルール ID | CA5405 |
Title | 委任のトークンの検証を常にスキップしない |
[カテゴリ] | Security |
修正が中断か中断なしであるか | なし |
.NET 8 では既定で有効 | いいえ |
原因
AudienceValidator または LifetimeValidator に割り当てられているコールバックからは、常に true
が返されます。
規則の説明
クリティカルな TokenValidationParameter
検証デリゲートから常に true
が返されるように設定すると、重要な認証セーフガードが無効にされます。 セーフガードを無効にすると、発行者からのトークンまたは期限切れトークンの検証が正しく行われなくなる可能性があります。
トークン検証のベスト プラクティスの詳細については、ライブラリの Wiki を参照してください。
違反の修正方法
- デリゲートのロジックを改良して、すべてのコード パスから
true
が返されるのを阻止します、これによりその種類の検証が効果的に無効にされます。 - エラーの場合に検証を失敗させたいときは
SecurityTokenInvalidAudienceException
またはSecurityTokenInvalidLifetimeException
をスローし、その他の場合はtrue
を返すことで合格にします。
どのようなときに警告を抑制するか
追加のログ記録のためにデリゲートを利用していて、それが、特定の種類の検証を不要とするトークンの種類を対象としている場合、この警告を抑制することが理にかなっている場合があります。 この検証を無効にするには、必ず事前にセキュリティへの影響について十分に検討してください。 トレードオフの詳細については、トークン検証ライブラリの Wikiを参照してください。
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
疑似コードの例
違反
using System;
using Microsoft.IdentityModel.Tokens;
class TestClass
{
public void TestMethod()
{
TokenValidationParameters parameters = new TokenValidationParameters();
parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
}
}
解決策
using System;
using Microsoft.IdentityModel.Tokens;
class TestClass
{
public void TestMethod()
{
TokenValidationParameters parameters = new TokenValidationParameters();
parameters.AudienceValidator = (audiences, token, tvp) =>
{
// Implement your own custom audience validation
if (PerformCustomAudienceValidation(audiences, token))
return true;
else
return false;
};
}
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET