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