防止使用 OAuth2 对同一用户但多台设备的登录请求

Posted

技术标签:

【中文标题】防止使用 OAuth2 对同一用户但多台设备的登录请求【英文标题】:Preventing login requests using OAuth2 with the same user but multiple devices 【发布时间】:2015-06-03 14:48:36 【问题描述】:

我们正在使用 Grails 和 OAuth2 插件,但这是一个更一般的 OAuth2 问题。

我们正在尝试解决同一用户使用多台设备的问题,如果没有必要,我们不想提示输入他们的用户/密码。举个例子:

AT = 访问令牌 RT = 刷新令牌

(假设初始 AT 可以使用密码授权类型获得,并且两个设备都获得相同的 AT)

Device 1:
1. Refresh, new AT
5. Bad AT
6. Refresh denied (bad RT)
7. Need Password for AT, new RT ... Repeats every time it expires

Device 2:
2. Bad AT 
3. Refresh denied (bad RT)
4. Need Password for new AT/RT

我们显然不想缓存密码,并且当我们有刷新令牌时不应该提示用户。有一个标志可以重用刷新令牌,但如果我们这样做了,我们最终会生成新的访问令牌,例如:

Device 1:
1. Refresh, new AT
4. Bad AT
5. Refresh, new AT… Repeats every request

Device 2:
2. Bad AT
3. Refresh, new AT

我认为我们不是第一个遇到此类问题的人,所以我想我会寻求想法/建议。

【问题讨论】:

【参考方案1】:

在我看来,您的 2 台设备需要获取不同的访问令牌和刷新令牌。授予的不同令牌的数量取决于TokenStore 的实现,所以这可能是您应该集中精力的地方。也许您可以使用自定义 AuthenticationKeyGenerator 来确保 2 个设备获得不同的令牌?还是使用智威汤逊?

【讨论】:

以上是关于防止使用 OAuth2 对同一用户但多台设备的登录请求的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2.0 - 它如何防止客户端冒充?

防止多个用户使用同一个浏览器登录同一个域

如何在具有相同苹果 ID 的多台设备的用户中找出“使用 Apple 登录”?

用户多台设备上的谷歌云消息通知

eNSP——通过Telent登录系统

通过防止用户在同一设备上注册来防止滥用促销