我正在实施spring oauth2来保护我的休息api。基本上我将rest api的使用限制在特定用户,而不是限制每个用户。
我已经实现了后端并使用spring oauth2保护了我的api。
我遵循以下步骤:
1)发送带有五个参数的GET请求。
的本地主机:8080 / SpringRestSecurityOauth /的OAuth /令牌grant_type =密码&安培; CLIENT_ID = Awyi123nasdk89&安培; client_secret = asdj39m32 @#$ S&安培;用户名=的Rahul @ Gmail和安培;密码=的Rahul @ 9831
2)服务器在spring security的帮助下验证用户,并返回带有访问代码的json响应
的 {
“access_token”:“22cb0d50-5bb9-463d-8c4a-8ddd680f553f”,
“token_type”:“bearer”,
“refresh_token”:“7ac7940a-d29d-4a4c-9a47-25a2167c8c49”,
“expires_in”:119
}
3)我通过将此访问令牌作为参数传递来访问受保护资源,请求如下所示:
localhost:8080 / SpringRestSecurityOauth / api / users /?access_token = 8c191a0f-ebe8-42cb-bc18-8e80f2c4238e
4)如果令牌过期,则用户需要使用在步骤(2)中接受的刷新令牌来获得新令牌。到期后新的访问令牌请求看起来像这样:
localhost:8080 / SpringRestSecurityOauth / oauth / token?grant_type = refresh_token& client_id = restapp& client_secret = restapp& refresh_token = 7ac7940a-d29d-4a4c-9a47-25a2167c8c49
以上所有步骤都正常。现在我需要在我的客户端实现这一点。这样特定的客户端就可以访问此调用。我使用HTML / CSS作为客户端技术。
客户如何获取访问令牌?它应该存储在浏览器本地存储中吗?或者它应该在每次休息呼叫时生成?
任何例子都可以帮助我继续前进。
答案 0 :(得分:0)
我正在像你一样实施我的项目。我使用angularjs并从响应json获取访问令牌,然后将其存储到cookie中。 此链接为您提供示例代码:http://www.baeldung.com/rest-api-spring-oauth2-angularjs。 (见前端 - 密码流)。
由于刷新令牌应该保密,客户端是html应用程序,因此您应该看到此链接http://www.baeldung.com/spring-security-oauth2-refresh-token-angular-js以处理刷新令牌。
对于html客户端,在访问令牌过期后使用刷新令牌获取访问令牌后,我使用http-auth-interceptor([http]://witoldsz.github.io/angular-http-auth/)重试所有由于访问令牌过期,休息请求失败。
很抱歉,我没有足够的声誉发布超过2个链接。