OAuth 刷新令牌如何在客户端工作?

Posted

技术标签:

【中文标题】OAuth 刷新令牌如何在客户端工作?【英文标题】:How OAuth Refresh Token works at client side? 【发布时间】:2021-04-11 06:40:54 【问题描述】:

我已经实现了 Spring Oauth 2 服务器并为我的一项服务添加了授权。 我想明白, 当我击球时:

localhost:9191/oauth/token?grant_type=password&username=krish&password=kpass

我收到这样的回复:


    "access_token": "24a20377-2ce7-4c6c-a65c-87adf443854b",
    "token_type": "bearer",
    "refresh_token": "39da80da-83bb-49e1-8e6a-8432428637ad",
    "expires_in": 59,
    "scope": "READ WRITE"

我正在使用相同的 access_token 来验证我的客户端,如下所示:

localhost:8080/getName
Adding header :
Authorization : bearer 24a20377-2ce7-4c6c-a65c-87adf443854b

所以我的问题是在 60 秒(到期时间)之后,我的客户将如何在刷新令牌的帮助下获得新令牌? (我假设客户在同一个会话中)。 spring 是用它的库在内部处理它还是我们需要在服务器中添加的任何东西? 请帮忙!

【问题讨论】:

【参考方案1】:

客户端将发送 Refresh Token Grant 消息,如this article 中所述。在 OAuth 中,授予是获得令牌的原因:

您已实施上述密码授予 大多数 UI 在用户登录后使用授权码授予 当访问令牌过期时,刷新令牌授予用于静默更新

Grant 消息通常是对令牌端点的 POST 请求。大多数人使用现成的授权服务器为您处理它们,因此您不必自己编写代码。

【讨论】:

所以客户端会自动点击 HttpResponse response = Unirest.post("localhost:9191/oauth/token) .header("content-type", "application/x-www-form-urlencoded" ) .body("grant_type=refresh_token&client_id=mobile&client_secret=pin&refresh_token=REFRESHTOKEN) .asString();令牌何时过期?并获得新的令牌? 是的 - 通常,当访问令牌过期时,客户端会从 API 获得 401 响应。然后客户端将发送上述刷新令牌授予消息以获取新的访问令牌,然后重试 API 调用。这是一些example client code。

以上是关于OAuth 刷新令牌如何在客户端工作?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 客户端凭据重新颁发访问令牌与刷新令牌

尝试使用spring oauth2中的刷新令牌获取新的访问令牌时出现无效的客户端错误

在 Spring Boot OAuth2RestOperations 中刷新 OAuth 令牌

无法在跨客户端谷歌 oauth2.0 中交换访问令牌和刷新令牌的授权码

Oauth 刷新令牌授予类型

OAUTH2 刷新令牌