我们正在构建一个广泛使用webapi后端的前端应用程序。 在此应用程序中,我们使用oauth来记录用户并将所有属于该用户的声明存储在非访问令牌中。 在前端,我们使用sentry错误日志记录(http://www.getsentry.com)来记录我们所有的javascript错误。这包括任何以某种方式出错或无法返回我们期望的结果的webapi调用。对于我们收到的每个错误,我们还会记录cookie信息,其中包括当时特定用户正在使用的访问令牌。
现在我们看到很多webapi调用出错,因为他们所做的调用是被禁止的。我检查了他们的一些访问权限,我立即注意到这些信息已经过时,并且应该在很久以前就已经刷新了,因为访问令牌已经过期了。
使用:
ERROR - RequestKromedaService.getKromedaAMReferences(142) : com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.beans.Result out of START_ARRAY token
在调试器内的我的localhost机器上,我可以取消保护访问令牌并查看其中的信息。
就像我说的,其中一些令牌中的信息包含无效信息,应该已经刷新了.. 然后我注意到他们没有刷新的原因是因为ExpiresUtc比IssuedUtc大2年以上。换一种说法;该令牌将在2年后失效。
以下是其中一个令牌的一些示例信息
var ticket = Startup.OAuthOptions.AccessTokenFormat.Unprotect("tokenhere");
我们正在使用来自oauth(20分钟)的默认过期时间,并且在管道中它将其设置为大于2年。用户现在可以刷新其声明的唯一方法是,如果他再次注销并重新登录,显然直到他们这样做,这会在前端创建很多错误。 通过调试我自己的令牌,我可以验证它是将它设置为20分钟,并且从未设法自己重现它。
答案 0 :(得分:0)
解决了,我们在某个地方隐藏了一个控制器方法,该方法发布了有效期为2年的访问令牌。多哈