0

我在 Azure 中有一个 Thinktecture 的 Identity Server v3 实例,它作为 WebApp 托管。一般来说,它按预期工作,但我在尝试通过令牌身份/连接/令牌端点和refresh_token授权类型使用刷新令牌时遇到一些问题。我有一个使用授权代码流的客户端,这是与有关此客户端的刷新令牌选项相关的设置:

// 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 秒)内有效。实际发生的是它没有按预期工作。出于某种原因,当我决定在前一个半小时后调用我的 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 回答