2016-09-21 25 views
2

私はカスタム認証を使用してJWTトークンを生成しています。Azureモバイルアプリ、認証は機能しますが、トークンの有効期限は機能しません

すべてのサービスに投稿すると、承認属性には[Authorize(Roles = "Admin")]と表示され、この役割を持たないユーザーには許可エラーが発生しています(良い!)。トークンの生成とポストバックが機能することがわかりました。

ただし、トークンが期限切れになると何も起こりません。私はローカルでテストしていると私はエラーを期待してい

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)); 

app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions() 
{ 
    SigningKey = ConfigurationManager.AppSettings["authSigningKey"], 
    ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] }, 
    ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] }, 
    TokenHandler = config.GetAppServiceTokenHandler() 
}); 

と:私は例外のいくつかの並べ替えを取得する必要がありながら、それが有効なトークンとして扱われ、私のコードはこれです期限切れのトークンを示すクライアントに送信されます。私は間違って何をしていますか?

答えて

2

クロックスキューを考慮するには、有効期限が5分間あります。私はあなたが10秒後に5分間の猶予期間が切れる前にこのトークンを送信していると推測しています。トークンが期限切れになっているかどうかを確認するには、5分以上待つようにしてください。

+1

時間の無駄な調査の後、これが解決策でした。 Azureチームは5分以内に例外や何らかの警告を追加する必要があります。良い点。 – Adam

+0

私は15分のクロックスキューを考慮することを推奨しますが、その数はばかげています。また、サーバー(少なくともS/O上のさまざまな記事に従っています)は、<3秒以内の時間スキューとほぼ同期しています。 –

0

トークンが期限切れになると、何も直接起こりません。最初にそのトークンを使用しようとすると、[Authorize]属性を使用する任意のエンドポイントに対して401 Unauthorizedエラーが発生します。これは、送信しているトークンがもう有効ではないためです。

関連する問題