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;
        };
    }
}