0

WebApp としてホストされている Azure に Thinktecture の Identity Server v3 のインスタンスがあります。一般に、期待どおりに動作しますが、 refresh_token 権限付与タイプでトークンID/接続/トークンエンドポイントを介してリフレッシュ トークンを使用しようとすると、いくつか問題が発生します。認証コード フローを使用するクライアントがあり、これはこのクライアントに関するリフレッシュ トークン オプションに関連する設定です。

// refresh token options
AccessTokenType = AccessTokenType.Jwt,
AccessTokenLifetime = 3600,
RefreshTokenUsage = TokenUsage.OneTimeOnly, // Every time generates new refresh token. Not only access token.
RefreshTokenExpiration = TokenExpiration.Sliding,
SlidingRefreshTokenLifetime = 1296000

これを扱ったことのある人にとっては、私がJWTトークンを使用していることは明らかであり、アクセストークンは1時間有効であり、その後はIdentity Serverに再度ログインする必要なく、リフレッシュトークンを使用して新しいアクセストークンとリフレッシュトークンを取得できます. 私の更新トークンは 15 日間 (1296000 秒) 有効でなければなりません。実際に起こることは、期待どおりに機能しないということです。なんらかの理由で、前の API から 1 時間半後に REST API (アイデンティティ サーバーの証明書利用者) を呼び出すことにすると、invalid_grant応答が返されます。

少しテストすることにし、アクセス トークンを 2 分で期限切れにし、リフレッシュ トークンを 10 分で期限切れにしました。それから、アクセス トークンの期限が切れてから 1、2、3 分後に呼び出しを試みました。期待どおりに動作していました。私は 1 時間のアクセス トークンでこの種のテストを行いたくないので、誰かが以前にそれを経験したことがあるかどうかをここで尋ねることにしました。

4

1 に答える 1

0

アクセス トークンの有効期間は 1 時間で、更新トークンの有効期間は 15 日間です。

API を呼び出すときに使用するトークンがアクセス トークンです。アクセス トークンを最後に更新してから 90 分後に呼び出しを行うと、エラーが発生するのは普通のことのように思えます。この場合、API を呼び出す前に、アクセス トークンがまだ有効かどうかを確認し、有効でない場合は更新する必要があります。

テストに関しては、スタックを下って、JwtSecurityTokenHandlerクラスがトークンを検証する責任があります。デフォルトでは、検証パラメーターは、システム間の時間の変動に対応するために 5 分の不一致を許可します。より小さい値に変更TokenValidationParameters.DefaultClockSkewすると、あなたの場合に役立ちます。

于 2016-12-15T05:48:32.800 に答える