2016-09-21 54 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未經授權的錯誤。這是因爲您提交的令牌不再有效。

相關問題