CA5405:永遠不要在委派中略過權杖驗證
屬性 | 值 |
---|---|
規則識別碼 | CA5405 |
職稱 | 不要一律略過委派中的令牌驗證 |
類別 | 安全性 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | No |
原因
指派給 AudienceValidator 或 LifetimeValidator 的回撥一律會傳回 true
。
檔案描述
藉由將重要 TokenValidationParameter
驗證委派設定為永遠傳回 true
,會停用重要的驗證保護。 停用保護可能會導致來自任何簽發者或過期令牌的令牌驗證不正確。
如需令牌驗證最佳做法的詳細資訊,請參閱連結 庫的Wiki。
如何修正違規
- 改善委派的邏輯,因此並非所有程式代碼路徑都會傳回
true
,這實際上會停用該類型的驗證。 - 當您想要驗證失敗,並傳回 其他案例時,擲
SecurityTokenInvalidAudienceException
回true
或SecurityTokenInvalidLifetimeException
失敗案例。
隱藏警告的時機
在某些情況下,您將委派用於其他記錄,而其適用於不需要特定驗證類型的令牌類型,則隱藏此警告可能很合理。 停用此驗證之前,請確定您已完全思考安全性含意。 如需取捨的相關信息,請參閱 令牌驗證連結庫的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;
};
}
}