首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端秘密+刷新spring oauth2中的访问令牌

客户端秘密+刷新spring oauth2中的访问令牌
EN

Stack Overflow用户
提问于 2016-02-18 20:05:58
回答 1查看 3.2K关注 0票数 3

我使用spring引导作为后端,使用Android设备作为系统的前端。现在,我面临着使用Spring-OAuth2保护我的资源服务器的挑战。

我有一些问题想和你讨论:

我的知识+ 本教程是说,我应该使用OAuth2.0“密码”授予类型为我的移动应用程序,以获得一个访问令牌。官方安全春季教程给出了一个示例,说明如何使用密码授予类型获得访问令牌:

代码语言:javascript
复制
$ curl client:secret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=pwd

下面是我的第一个问题:是否有可能在不发送“客户端机密”的情况下使用密码授予类型获得访问令牌?

因为客户端秘密可以通过反编译客户端应用程序进行“反向工程”。在没有秘密的情况下获得访问令牌应该是可能的,因为用于安卓的Facebook也不需要移动应用程序中的client_secret。

在这里,我想我很难理解为什么clientID + clientSecret需要包含在上面的请求中,因为已经包含了用户名+密码,所以应该可以生成访问令牌,那么这会带来更高级别的安全性吗?这是否意味着(例如):我在我的Android客户端以Filip身份登录,并将每个请求的访问令牌A发送到服务器。然后,我以Filip身份登录到web客户端,并尝试使用访问令牌A从web客户端访问资源服务器,这是不可能的,因为访问令牌A只为Android客户端发出?

下一个问题是,如何刷新获得的访问令牌?

我试图使用下面的命令这样做,但是我得到了“访问这个资源需要完全身份验证”。获得新的刷新令牌后,是否可以再次使用刷新令牌刷新新的访问令牌?

代码语言:javascript
复制
curl -v --data "grant_type=refresh_token&client_id=acme&client_secret=acmesecret&refresh_token=REFRESH_TOKEN" http://localhost:9999/uaa/oauth/token

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-18 21:50:36

OAuth 2.0规范允许所谓的公共客户机,即不对自己进行身份验证的客户端。因此,可以在公共客户端(即不需要发送客户端机密的客户端)使用资源所有者密码凭据授予。这确实意味着授权服务器不能假定客户端的任何内容,因为client_id不是秘密,也无法防止使用此授权类型的恶意客户端相互冒充对方。因此,以这种方式使用它是以降低安全性为代价的,尽管有人可能会争辩说,在您的情况下,没有办法使用机密客户端,所以没有区别。

通常,资源所有者密码凭据授予是OAuth的反模式,只用于迁移目的,因为它本身就违背了OAuth的大多数目标。

访问令牌是在每个客户端的基础上发出的。

刷新令牌请求似乎还可以,但是授权服务器可能需要基本的身份验证,而不是将client_id/client_保密作为post参数,考虑到您对原始访问令牌请求也是这样做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35491381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档