首页 > 解决方案 > 如何使用 Java 通过 OAuth 流从 Reddit 检索访问令牌

问题描述

我有我的授权网址 - https://www.reddit.com/api/v1/authorize?client_id=xuJKekGTr1-V8Q&response_type=code&state=dfDfsd4gdf&redirect_uri=http://localhost:8080/redditimageuploader/callback&duration=permanent&scope=submit

但我真的不知道从这里做什么?我在网上找到了一些指南,但这只是我不太了解的很多行话。当我单击“允许”按钮时,它会将我带到我定义为 my 的 url,redirect_uri并附加到字符串的末尾是state我设置的那个code=,然后是一个字符串 - 所以我假设我需要用这些做点什么,但我不知道是什么。

我想知道是否有一个超级简单的“像我 5 岁一样解释”的分步指南来说明从这里做什么?

标签: javaoauthreddit

解决方案


这是一个标准的 OAuth 流程。从文档:

  1. 当用户单击您网站上的“使用 Reddit 登录”按钮时,您必须将用户重定向到 Reddit 上的授权 URL - 您问题中的那个,从https://www.reddit.com/api/v1/authorize您指定的请求参数开始并丰富。Reddit 然后会要求用户登录,以及他是否想要授权您的应用访问所请求的范围。请参阅https://github.com/reddit-archive/reddit/wiki/OAuth2#allowing-the-user-to-authorize-your-application
  2. 如果用户同意,那么 Reddit 会将用户重定向到您在授权 URL 中指定为请求参数的重定向 URI(在您的情况下为http://localhost:8080/redditimageuploader/callback)。Reddit 将添加一个state请求参数:您需要确保这与您的请求中的参数相同。
  3. 通过对 的 POST 请求检索访问令牌https://www.reddit.com/api/v1/access_token,包括您的数据中的以下数据:grant_type=authorization_code&code=CODE&redirect_uri=URI。将 CODE 替换为您收到的值,将 URI 替换为与第一步相同的重定向 URI。对第三步的响应应该返回一个访问令牌:代表用户存储它以备将来请求。见https://github.com/reddit-archive/reddit/wiki/OAuth2#retrieving-the-access-token

额外的步骤可用并记录在错误处理和访问令牌操作(失效/更新)。

因此,一旦您正确实施了第一步,您需要做的就是创建一个端点(当您的重定向 URI 被重定向到时调用的端点),它将:

  1. 检查state请求参数
  2. 检索访问令牌(第三步)并存储它

让我知道这是否足够清楚。


推荐阅读