【发布时间】:2016-05-31 04:54:11
【问题描述】:
我使用 Spring Boot 作为后端,Android 设备作为我系统的前端。
现在我面临着使用 Spring-OAuth2 来保护我的资源服务器的挑战。
我有一些问题想和你讨论:
我的知识 + this tutorial 说我应该为我的移动应用程序使用 OAuth2.0“密码”授权类型来获取访问令牌。官方spring tutorial for security给出了如何使用password grant type获取access token的例子:
$ curl client:secret@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=pwd
这是我的第一个问题:是否有可能在不发送“客户端密码”的情况下使用密码授予类型获取访问令牌?
由于可以通过反编译客户端应用程序来“逆向工程”客户端密码。获取没有秘密的访问令牌应该是可能的,因为适用于 Android 的 Facebook SDK 也不需要移动应用程序中的 client_secret。
我想这里我有点理解为什么clientID + clientSecret需要包含在上面的请求中,因为,既然已经包含了用户名+密码,应该可以生成访问令牌,那么这是否带来了一个next安全级别?它是否暗示以下(示例):我在我的 Android 客户端中以 Filip 身份登录,并且我将访问令牌 A 与每个请求一起发送到服务器。然后我以 Filip 身份登录到 Web 客户端并尝试使用访问令牌 A 从 Web 客户端访问资源服务器,这是不可能的,因为访问令牌 A 仅针对 Android 客户端发布?
下一个问题是如何刷新获得的访问令牌?
我试图使用下面的命令这样做,但我得到“访问此资源需要完全身份验证”。获得新的刷新令牌后,我可以使用刷新令牌再次刷新我的新访问令牌吗?
curl -v --data "grant_type=refresh_token&client_id=acme&client_secret=acmesecret&refresh_token=REFRESH_TOKEN" http://localhost:9999/uaa/oauth/token
谢谢
【问题讨论】:
标签: spring spring-security oauth-2.0 spring-oauth2