共用方式為


CA5405:永遠不要在委派中略過權杖驗證

屬性
規則識別碼 CA5405
職稱 不要一律略過委派中的令牌驗證
類別 安全性
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 No

原因

指派給 AudienceValidatorLifetimeValidator 的回撥一律會傳回 true

檔案描述

藉由將重要 TokenValidationParameter 驗證委派設定為永遠傳回 true,會停用重要的驗證保護。 停用保護可能會導致來自任何簽發者或過期令牌的令牌驗證不正確。

如需令牌驗證最佳做法的詳細資訊,請參閱連結 庫的Wiki

如何修正違規

  • 改善委派的邏輯,因此並非所有程式代碼路徑都會傳回 true,這實際上會停用該類型的驗證。
  • 當您想要驗證失敗,並傳回 其他案例時,擲SecurityTokenInvalidAudienceExceptiontrueSecurityTokenInvalidLifetimeException 失敗案例。

隱藏警告的時機

在某些情況下,您將委派用於其他記錄,而其適用於不需要特定驗證類型的令牌類型,則隱藏此警告可能很合理。 停用此驗證之前,請確定您已完全思考安全性含意。 如需取捨的相關信息,請參閱 令牌驗證連結庫的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;
        };
    }
}