当前位置: 首页 > 知识库问答 >
问题:

如何在spring Boot2 Oauth2中获得令牌?

汝岳
2023-03-14

我是spring security Oauth2的新手。我想运行这个授权服务器示例代码。我成功地运行了它,为了获取令牌,我将邮递员设置为以下,然后发送请求:

在这种情况下,我输入了带有其密码的客户端id,但我想在没有它们的情况下登录。例如,我的用户发送用户名、密码和客户端id,然后获得令牌。但我发送的每一个请求,服务器都会返回401响应。在Spring boot 2 oauth 2中,我该怎么做呢?

共有1个答案

经博延
2023-03-14

1)要获取访问令牌,必须使用以下请求:

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password&username=username&password=password&scope=*" \

使用基本身份验证和应用程序凭据(如果愿意,您可以避免该秘密)。您必须在请求正文中传递的用户名称及其密码,以及grant_type字段中的“password”值。

作为响应,您将获得访问和刷新令牌,例如:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM",
    "expires_in": 119,
    "scope": "*"
    "jti": "c95c93a0-18f8-48fc-a3de-5efcf5ab10a9"
}
curl -X GET http://localhost:8080/demo \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw'

3)要刷新令牌,您必须再次使用带有客户端凭据的基本身份验证,但在这种情况下,您需要将“refresh_token”作为grant_type:

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=refresh_token&scope=*&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM'

每次访问令牌过期时,您必须用第3个请求刷新它。那么您将能够再次访问这些资源。

附加信息

2)相关演示应用

3)相关邮递员收藏

 类似资料:
  • 如何在android中使用webView获取oAuth2令牌?我知道如何创建一个webview并打开url以获取oAuth2令牌,但我不知道如何在获取后从webview切换回应用程序,并将oAuth2token复制到变量中,有人知道如何做到这一点或知道一个好的tut吗?p、 s.我正在尝试获取oAuth2令牌以访问google api

  • 我正在开发一个通过FCM使用通知的测试应用程序。我使用Volley将数据从设备发送到服务器(WAMP),但令牌始终是空字符串/我编写的默认值。我在互联网上搜索了一下,但我仍然不知道为什么令牌没有被存储/生成(我是编码新手。)还有一件事:每次我发送令牌时,toast都会向我显示我在那里写的“好的”文本,但它也会给我很多html代码。这是我的文件:MainActivity.kt FcmInstance

  • 我已经用Jhipster创建了微服务(Spring Boot)应用程序(有网关微服务keybeat),还配置了keybeat。 一切正常,但我在注销应用程序中遇到了问题,当我从UI中点击注销API时,它只会从网关注销(不会破坏Keyclope会话) 注意:服务器没有在浏览器上保存任何cookie,除了JSESSIONID 我需要从KeyClope注销用户会话。为此,我浏览了以下链接 通过Keycl

  • 下面的代码使用Google oauth2机制登录用户。我们需要在用户离线时处理用户日历的更新,所以我们最终需要“刷新令牌”。grantOfflineAccess()的结果是否返回刷新令牌(在下面,我可以看到response.code包含一个可能是刷新令牌的值)? 我如何获得一个刷新令牌,可以用来(服务器端)创建新的访问键,以便离线访问用户的谷歌日历?

  • 我已经看了几天Spotify api和示例源代码,但我仍然不知道如何获得访问令牌来访问用户的播放列表数据。我已经到了打开登录窗口,用户登录,然后我收到授权码的地步。此时,我尝试做如下事情: 和 但是不管怎样,我得到的结果是: 而不是代币。我肯定这很简单,但我不擅长JS。请帮忙!谢谢! (编辑)我忘了提: api认证指南链接:https://developer.spotify.com/web-api