我正在使用自定义身份验证并生成JWT令牌。Azure移动应用程序,授权有效,但令牌过期不起作用
当我发布任何服务时,任何授权属性均表示[Authorize(Roles = "Admin")]
受到尊重,并且没有此角色的用户会收到授权错误(良好!)。这突出显示了令牌生成和回发工作!
但是,当令牌过期时,什么都不会发生。它被视为一个有效的标记,而我应该得到某种异常,我的代码是这样的:
app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions()
{
SigningKey = ConfigurationManager.AppSettings["authSigningKey"],
ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] },
ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] },
TokenHandler = config.GetAppServiceTokenHandler()
});
和:
JwtSecurityToken token = AppServiceLoginHandler.CreateToken(
new Claim[] { new
Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) },
mySigningKey,
myAppURL,
myAppURL,
// Setting very short time to test expiration
TimeSpan.FromSeconds(10));
我本地测试,我期待一个错误被发送给客户说明过期的令牌。我究竟做错了什么?
经过数小时的调查,这是解决方案。 Azure团队应该在5分钟内添加一个例外或某种警报。好点。 – Adam
我知道他们建议考虑甚至15分钟的时钟偏差,但数字很荒谬。此外,他们的服务器(至少根据S/O上的各种帖子)与时间偏差在<3秒范围内几乎同步。 –