使用IdentityServer3滑动到期会话cookie

时间:2017-03-10 13:26:05

标签: identityserver3

我正在混合使用浏览器(Xamarin webview;最初登录并获取1小时后到期的访问令牌)和httpclient(访问我的webapi端点)。当令牌过期时,我使用httpclient(使用从webview复制的cookie)使用/ connect / authorize端点请求新的令牌以获取新的访问令牌。

只要Cookie没有过期,这项工作就可以了。

我已将身份服务器设置为在身份验证Cookie上有1天的滑动过期(CookieOptions:ExpireTimeSpan / SlidingExpiration)。我认为这会导致(除了获得一个新的有效令牌)在每次向身份验证端点发出请求时收到新的cookie,从而有效地保持我的登录状态。问题是我在使用登录时收到的初始cookie到期了使用webview。因此,无论我访问授权端点多少次,我都会在一天后退出,而且我无法再从身份验证端点获取新令牌。

假设我没有完全采取错误的方法,那些请求应该给我更新的cookie(IdSvr?IdSvr.Session?我还需要哪些?)以及新的到期日期,所以我保持登录IdentityServer ?

注意:我确实看过刷新令牌,但这些内容不适用于隐式流程。我认为我需要隐式流程,因为我不应该在分布式Xamarin应用程序中保存客户机密码。使用cookies似乎是最好的选择。

1 个答案:

答案 0 :(得分:4)

自我(和其他人)的注意事项:身份验证cookie是重要的。记录:那是idsrv cookie。

然后在测试过程中让我困惑的事情是:调用/ authorize端点只会在至少一半的到期时间内返回新的授权(idsrv)cookie。

这让我感到很惊讶,因为那意味着:

  • 8:00以4小时的滑动时间(到期时间:12:00)登录
  • 9:59请求/授权端点(预计新的到期时间:13:59)
  • 12:01再次请求/授权

12:01请求会失败,因为9:59的电话没有让我更新cookie ...

如果我在两分钟后的10:01发出第二次请求,我会得到一个更新的cookie,到期时间为14:01。

结论:当过期时间的一半过去时,滑动过期似乎只会滑动。