【问题标题】:Ruby OAuth2 clientRuby OAuth2 客户端
【发布时间】:2023-03-03 23:26:01
【问题描述】:

我正在尝试创建一个脚本来访问Quizlet API

这些 API 受 OAuth2 保护,我正在使用这个 oauth2 ruby​​ gem https://github.com/intridea/oauth2

gem 的 GitHub 页面显示了一个示例,但对我来说不起作用,我觉得我缺少一些部分。 这是示例的一部分:

client.auth_code.authorize_url(:redirect_uri => 'http://localhost:8080/oauth2/callback')
# => "https://example.org/oauth/authorization?response_type=code&client_id=client_id&redirect_uri=http://localhost:8080/oauth2/callback"

token = client.auth_code.get_token('authorization_code_value', :redirect_uri => 'http://localhost:8080/oauth2/callback', :headers => {'Authorization' => 'Basic some_password'})

两个问题:

  • 我应该如何处理authorize_url 的结果?应该在浏览器上打开此 url 以继续登录,但 gem 不会自动打开它。我应该要求用户这样做吗?
  • 回调 URL 呢?该示例使用http://localhost:8080/oauth2/callback,但不清楚gem itelf 是否负责侦听该端口。

有什么建议吗?

【问题讨论】:

    标签: ruby oauth oauth-2.0 google-oauth oauth2


    【解决方案1】:

    查看 Quizlet API 要求您执行的操作可能更容易,并跳过与 oauth gem 的集成。我可能是错的,我很想看看 gem 是如何使用的,但看看如何逐步实现 oauth 客户端仍然是个好主意。

    这取自 Quizlet API 文档:

    1. 将用户发送至https://quizlet.com/authorize。这可以通过显示一个链接供用户单击或重定向服务器端来完成。
    2. 一旦用户接受/拒绝您的 oauth(这发生在 quizlet 网站上,而不是您自己的网站上),quizlet 就会向您的服务器发送请求。由于/authorize 调用,Quizlet 现在将有一个redirect_uri,他们将使用它与您的服务器取得联系。在您的服务器对该路由的操作中,您可以获得authorization_code
    3. authorization_code 发送到https://api.quizlet.com/oauth/token,然后在响应中获得一个access_token,您可以将其用于其余的api 请求。

    关于宝石

    • 您应该将授权 url 发送给用户。这是上面的第 1 步
    • gem 不负责监听重定向。为此,您需要使用 Web 服务器。

    【讨论】:

    • 感谢 @max-pleaner 我阅读了文档,并且能够使用一些 curlbash 魔法与 API 进行交互。这个问题与gem 更相关,我仍然不明白gem 是否也提供了网络服务器。
    • @IgnazioC 好的更新答案,希望能涵盖您关于 gem 的一些问题
    猜你喜欢
    • 2022-08-06
    • 1970-01-01
    • 2012-10-22
    • 2013-06-20
    • 2016-06-26
    • 2021-12-22
    • 2015-11-09
    • 2015-10-31
    • 1970-01-01
    相关资源
    最近更新 更多