0

我在Azure中托管为WebApp的Thinktecture身份服务器v3的实例。一般来说,它的工作方式与预期的一样,但我有一些问题试图通过令牌身份/连接/令牌端点与refresh_token授权类型使用刷新令牌。我有一个使用授权码流的客户端,这是关系到有关此客户端刷新令牌选项的设置:在Azure中部署身份验证服务器3刷新令牌问题

// 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(Identity Server的依赖方)时,在前一个小时之后的一个半小时,我得到了invalid_grant响应。

我决定对它进行一点测试,并使我的访问令牌在2分钟内过期,我的刷新令牌为10次。然后,我尝试在访问令牌后1,2,3分钟拨打电话已经过期,并且按预期工作。我真的不想用1小时的访问令牌进行这种测试,所以我决定在这里问一下是否有人曾经这样做过。

回答

0

您的接入令牌终身为1小时,刷新令牌终身为15天。

您在调用API时使用的令牌是访问令牌。如果您在最后一次刷新访问令牌后90分钟拨打电话,则会出现错误,这对我来说很正常。在这种情况下,在调用API之前,您应该检查访问令牌是否仍然有效,如果不是,则刷新它。

至于你的测试,下了堆栈JwtSecurityTokenHandler类负责验证令牌。默认情况下,验证参数允许mismatch of 5 minutes适应系统之间的时间差异。将TokenValidationParameters.DefaultClockSkew修改为较小的值应该有助于您的情况。

+0

当我的访问令牌过期时,我知道客户端。这就是为什么我使用我的刷新令牌来接收新访问令牌并使用它。我调用刷新令牌端点,但由于某种原因,此方法在某个时间停止工作。 – user2128702

+0

什么停止工作?使用当前的刷新标记在IdSrv上打开标记端点以获取新的访问标记和新的刷新标记?或者用你的访问令牌打你的API? –

+0

是的,对标记端点的调用返回invalid_grant错误。它不再识别我的刷新标记。 – user2128702