我将 spring boot 用于后端,将 Android 设备用于系统的前端。现在我面临着使用 Spring-OAuth2 来保护我的资源服务器的挑战。
我有一些问题想和你讨论:
我的知识+本教程说我应该为我的移动应用程序使用 OAuth2.0“密码”授权类型来获取访问令牌。官方spring 安全教程给出了如何使用密码授权类型获取访问令牌的示例:
$ 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
谢谢