如何使用刷新令牌在 django-oauth-toolkit 上获取新的访问令牌?

Posted

技术标签:

【中文标题】如何使用刷新令牌在 django-oauth-toolkit 上获取新的访问令牌?【英文标题】:How to use refresh token to obtain new access token on django-oauth-toolkit? 【发布时间】:2015-01-10 06:09:12 【问题描述】:

我在我的 Django 项目中使用 django-oauth-toolkit 0.7 通过我的网站提供 Oauth2。

我已按照here 的步骤成功获取了访问令牌,但我无法使用refresh token 获取新的access token(如果访问令牌已过期)。

我可以通过consumer client 获得access token,但是如何在我的网站中使用我的网址获得这个,因为当我尝试获得新的access tokenrefresh token

我的访问和刷新令牌是这样的:


  "access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in":3920,
  "token_type":"Bearer",
  "refresh_token":"1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

要获得一个新的access_token,通过使用您现有的refresh_token,您需要向最初用于获取令牌的同一网址发送一个POST请求(/o/token/,假设为默认网址)。 grant_type 现在将是 refresh_token,并且您还需要使用您的客户端凭据进行身份验证,因为您已获得一些凭据。

总结一下: curl -X POST -d "grant_type=refresh_token&client_id=<your_client_id>&client_secret=<your_client_secret>&refresh_token=<your_refresh_token>" http://localhost:8000/o/token/

如果您想了解更多信息,可以查看此link 以查看标准的相关部分。

【讨论】:

如果 oauth 应用程序是客户端或移动应用程序,您如何保护其客户端机密? @AshishGupta 你可以通过你自己的服务器隧道请求。例如:创建一个 php 脚本并将刷新令牌传递给它。服务器知道秘密并将其发送到 Reddit API,并将结果传递回客户端,因此客户端永远不需要知道秘密。【参考方案2】:

您可以在 POSTMAN 中传递 post 请求。或者试试这个,它对我有用:

curl -X POST -H 'Authorization: Basic your_application_id' -d 'refresh_token=your_refresh_token&grant_type=refresh_token' localhost:3000/o/token


    "token_type":"bearer",
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiVlx1MDAxNcKbwoNUwoonbFPCu8KhwrYiLCJpYXQiOjE0NDQyNjI4NjYsImV4cCI6MTQ0NDI2Mjg4Nn0.Dww7TC-d0teDAgsmKHw7bhF2THNichsE6rVJq9xu_2s",
    "expires_in":20,
    "refresh_token":"7fd15938c823cf58e78019bea2af142f9449696a"

试试这个Link

【讨论】:

【参考方案3】:

要通过 URL 从 refresh_token 获取新的 access_token,您可以使用以下 URL 并在参数中传递数据:

http://127.0.0.1:8000/o/token/?grant_type=refresh_token&refresh_token=<refresh_token_here>&client_id=<your client id here>&client_secret=<your client secret here>

一旦您在refresh_token 的帮助下生成了一个新的access_token,那么旧的access_token 就会过期。

【讨论】:

以上是关于如何使用刷新令牌在 django-oauth-toolkit 上获取新的访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 8:如何在没有刷新令牌的情况下刷新令牌

如何在资源请求上重新生成刷新令牌和访问令牌?

如何实现刷新令牌轮换?

如何使用刷新令牌刷新访问令牌?

Cognito 用户池:如何使用刷新令牌刷新访问令牌

如何使用刷新令牌更新访问令牌?