防止使用 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 对同一用户但多台设备的登录请求的主要内容,如果未能解决你的问题,请参考以下文章