分享方式:


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

屬性
規則識別碼 CA5405
標題 不要一律略過委派中的權杖驗證
類別 安全性
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 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;
        };
    }
}