登录使用 github OAuth 的网页

Log in a webpage which uses github OAuth

我想使用 httr.

以编程方式登录 https://adventofcode.com/2021

我对OAuth“舞蹈”只有很肤浅的了解,所以为了理解其中的原理,我做了以下工作:

  1. 在 GitHub
  2. 上创建一个 OAuth App
  3. 使用以下代码进行身份验证(N.B. 我知道我可以简单地使用 oauth2.0_token 但我觉得这个工作流程帮助我更好地理解交换的不同消息)。
library(httr)

client_id <- "<my client id>"
base_url <- "https://github.com"
path <- "login/oauth/authorize"
client_secret <- "<my secret>"

url <- modify_url(base_url, path = path, 
                  query = list(client_id = client_id, 
                               redirect_uri = oauth_callback()))
code <- oauth_listener(url) ## needed to provide credentials in the web browser
access_token <- POST(modify_url(base_url, path = "login/oauth/access_token"),
                     add_headers(Accept = "application/json"),
                     body = list(client_id = client_id,
                                 client_secret = client_secret,
                                 code = code$code))
## successfully returns the values
GET("https://api.github.com/rate_limit", 
    add_headers(Authorization = paste(content(access_token)$access_token,
                                      "OAUTH-TOKEN")))

从这个例子中,我想我理解了 documentation 中突出显示的步骤。

但是,我看不出如何使用它来登录 https://adventofcode.com/2021。当然,我没有 client_secret,也不能将响应重定向到我的 localhost(因为 GitHub 要求存储的回调与重定向 URI 匹配)。

因此,我想知道如何以编程方式登录 https://adventofcode.com/2021 来获取我的任务数据?

我认为你不匹配OAuth2 roles。如果你想使用adventofcode.com,你就是一个资源拥有者,adventofcode.com是一个客户端,github是一个授权服务器。所以你进行身份验证,adventofcode.com 得到一个授权码,然后是令牌。他们可以使用令牌获取有关您的 github 帐户的信息。

您发布的示例代码不同 - 您的应用程序是一个客户端,在用户通过身份验证并同意将令牌传递给您之后从授权服务器 (github) 获取代码和令牌应用程序(权限委托)。因此,您可能无法将 adventofcode.com 包含在这种情况下。

唯一的方法是 adventofcode.com 扮演资源服务器的角色,并且他们的 API 接受来自不同客户端的 github 令牌。但我对他们一无所知 API.