我正在我的应用程序中实现安全令牌功能。您可以指定到期时间和/或最大使用次数。
如果同时指定了两个条件,则检查两个条件,如果指定了其中一个条件,则只检查该条件。
我的问题是,我应该如何处理令牌存在但没有到期时间或最大值的情况?
是否应对用户进行身份验证,未经过身份验证或是否应抛出异常。
if (this.ExpireTime.HasValue && this.MaxUses.HasValue)
retval = DateTime.Now < this.ExpireTime.Value && this.Counter < this.MaxUses.Value;
else if (this.ExpireTime.HasValue)
retval = DateTime.Now < this.ExpireTime.Value;
else if (this.MaxUses.HasValue)
retval = this.Counter <= this.MaxUses.Value;
else
{
throw new ApplicationException("Invalid AuthToken: ExpireTime And MaxUses are null")
}
答案 0 :(得分:0)
您需要选择不过期的含义。鉴于您的应用程序及其用例的目的,令牌应该永久有效吗?或者更适合创建最大到期/最大使用次数?
答案 1 :(得分:0)
如果不存在所有信息,则应抛出“无效的authtoken”异常。令牌应始终过期,例如,如果会话ID未使其违反CWE-613。这些系统背后的安全性是Cryptographic Nonce,如果它们没有到期,那么最终攻击者可以猜出它的价值。