| 属性 | 值 |
|---|---|
| 规则 ID | CA5405 |
| 标题 | 请勿总是跳过委托中的令牌验证 |
| 类别 | 安全性 |
| 修复是导致破坏性更改还是非破坏性更改 | 非中断 |
| 在 .NET 10 中默认启用 | 否 |
| 适用的语言 | C# 和 Visual Basic |
原因
分配给 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;
};
}
}