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

“Invalid_grant”响应通过 OAuth2 从红色编辑器获取访问令牌

莘昊
2023-03-14

我可以使用OAuth2和Rails通过reddit fine登录到我的localhost站点,但是当我试图发出后续(必需的)POST请求以获取进行实际API调用所需的访问令牌时,我得到了响应‘invalid _ grant’。OAuth reddit文档(这里)说invalid_grant的意思是“代码已经过期或者已经被使用了”。

但我确信它没有被重用,我已经移动了代码以确保它不能运行两次,并且正在监视控制台。更改POST请求中的其他值会给出401,因此请求本身很好(我认为)。

omni auth _ callbacks _ controller . Rb

@result = HTTParty.post("https://ssl.reddit.com/api/v1/access_token",
  :body => { 
    :state => params[:state],
    :redirect_uri => "http://localhost:3000/users/auth/reddit/callback", 
    :code => params[:code],
    :grant_type => 'authorization_code',
  },
  :basic_auth=> { 
    username: ENV['REDDIT_KEY'], 
    password: ENV['REDDIT_SECRET']
  }
)

logger.info(@result.to_json)

我尝试过的事情:

  • 四重检查我的所有reddit应用程序详细信息是否正确,例如密钥,机密redirect_uri
  • 确保 Linux 时钟与 NTP 同步
  • 代码结构的变体,以确保只运行一次
  • 不同的以太网 gem
  • 无休止的迂回无果的尝试和错误

如果有人有任何想法,将不胜感激。在这上面花了一天的大部分时间,而且变得有点可笑。谢了。

共有1个答案

苍志文
2023-03-14

好了,起作用了。哇这太尴尬了...因此,我使用的omniauth-reddit gem实际上为您获得了令牌以及授权本身——使用该gem根本不需要整个额外的步骤,因此它实际上被使用了不止一次,因此产生了invalid_grant。

更糟糕的是,我今天早些时候在响应中看到了“令牌”,并使用它测试了一个直接的应用编程接口调用,但一定是在某种程度上搞乱了语法,因为格式不是我所期望的(另外,我使用的指南中提到了“授权令牌”和“访问令牌”,所以我认为是前者),所以我一整天都在徒劳地追逐。

 类似资料:
  • 我想用retforIt从服务器得到响应。下面是一些代码: 怎么了?我在哪里可以找到改装文档?是什么?请帮忙

  • 我正在为我的web应用程序实现azure,并尝试通过下面的openId connect教程获得访问令牌 内容类型:application/x-www-form-urlencoded GRANT_TYPE=授权代码 client_id=2D4D11A2-F814-46A7-890A-274A72A7309E 请帮帮我 提前致谢

  • 下面是我的代码, 在我的实证测试中,我可以通过将作用域设置为 然而,当我想访问用户的谷歌驱动器时,我遵循了开发文档中的说明 当应用程序执行时,Android-Studio中的日志猫总是提到异常事件GoogleAuthException发生,并且事件消息为“未知”。 在Android中获得谷歌驱动器访问令牌的正确方法是什么?多谢.

  • 下面是security.xml文件,我正在使用它合并spring-security-oauth2。 我必须在spring-security.xml文件中做哪些更改,以便在JSON中发送查询参数?

  • 我想使用上传一个pdf文件到Google Drive,用于自动测试目的。 我已经在Google云平台上创建了一个帐户(获得了客户端ID和机密),并启用了Google Drive API。 谢了。

  • 需要使用passport为laravel构建api系统。在拉威尔。2 Oauth 2集成有一个单独的类授权程序,用于执行通过访问令牌获取用户数据的操作方式 但在passport中,没有基于访问令牌获取用户详细信息的单独方法。有人能帮我吗?