2016-09-21 55 views
2

我正在使用自定义身份验证并生成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)); 

我本地测试,我期待一个错误被发送给客户说明过期的令牌。我究竟做错了什么?

回答

2

有一个5分钟的过期宽限期来解决时钟偏移问题。我猜你是在10秒后但在5分钟宽限期到期之前发送该令牌。尝试等待超过5分钟以确认令牌是否已过期。

+1

经过数小时的调查,这是解决方案。 Azure团队应该在5分钟内添加一个例外或某种警报。好点。 – Adam

+0

我知道他们建议考虑甚至15分钟的时钟偏差,但数字很荒谬。此外,他们的服务器(至少根据S/O上的各种帖子)与时间偏差在<3秒范围内几乎同步。 –

0

当令牌过期时,不会直接发生任何事情。当您首次尝试使用该令牌时,对于使用[Authorize]属性的任何端点,您应该会收到401未经授权的错误。这是因为您提交的令牌不再有效。

相关问题