使用oauth提供程序在不同计算机上同时登录

时间:2014-11-30 13:38:24

标签: servicestack

正如我所说的那样here

我正在构建一个服务,我从SocialBootstrapApi借用了代码。我虽然明确地使用了Linkedin oauth2提供商。

我对单个用户没有任何抱怨 - 代码运行良好,但如果同一用户同时从两台不同的机器(使用相同的linkedin帐户)登录,则原始登录访问令牌无效。当用户保持登录状态(因为会话cookie已经到位),如果用户执行使用过期访问令牌执行需要进行linkedin api调用的任务的操作,则调用将失败,并显示无效的访问令牌错误。显然我理解这背后的原因,但我不确定如何纠正它。在这个移动的第一世界中,我们拥有如此多的设备,并且一台设备无法从其他设备注销用户。

那么,我是否应该在执行api调用之前每次从UserAuthDetails表中重新获取访问令牌以防万一它已被无效?或者,这不应该在缓存中更新,并且下次访问访问令牌时,刷新的服务因为缓存已经更新了吗?

由于

1 个答案:

答案 0 :(得分:0)

最简单的选项(以及我首选的解决方案)是在进行API调用之前从IAuthRepository获取访问令牌。 IAuthRepository.GetUserAuthDetails()将返回包含访问令牌的UserAuthDetails。

首先尝试在访问UserAuth后端数据存储区之前在会话上使用访问令牌,这可以稍微优化一下,尽管因为内部数据存储区所需的简单数据库调用的成本可能要小得多。对远程服务(即LinkedIn API)的调用 - 优化可能不值得。但是如果你采用这种方法,我会用新的访问令牌更新用户会话,以便下次可以使用来自缓存的新令牌。

每个用户会话引用缓存中的不同会话

从不同浏览器,个人计算机,设备等进行身份验证的用户每个都有自己的会话,这只是存储在AuthUserSession引用的已注册ICacheClient中的ServiceStack's Session Cookies POCO,即他们不会共享相同的缓存,因此对其中一个用户会话的更改不会影响任何其他用户会话。

相关问题