httr2(即oauth_flow_auth_code_url)似乎忽略了通过oauth_client()或req_oauth_auth_code()移交的状态参数

问题描述 投票:0回答:1

我尝试使用 pseudo-oob另一个参考)使用 httr2 中的 OAuth 功能获取授权令牌。我已经快到了,但在最后一步中,当我在 R 控制台提示符中手动输入访问令牌时,我还必须输入“stage”值。无论我在那里输入什么,我都会收到错误。

这就是控制台的样子:

Enter authorization code or URL: xxxx
Enter state parameter: xxxx
Error in `oauth_flow_auth_code_read()`:
! Authentication failure: state does not match

我尝试缩小此错误的原因,但发现无法将状态值传递给

oauth_flow_auth_code_url
函数。代码(可重现的示例)如下:

if (!require("httr2")) {
  install.packages("httr2")
  install.packages("httpuv")
}

library("httr2")

debug(oauth_flow_auth_code_url)

req1 <- request("https://google.com/")

client <- oauth_client(
  id = "id-123",
  token_url = "https://google.com/token",
  secret = "the-sectret-123",
  key = NULL,
  auth = c("body", "header", "jwt_sig")[2],
  auth_params = list(state = "abcdefgh")
)

req2 <- req_oauth_auth_code(
  req = req1,
  client = client,
  auth_url = "https://google.com/token",
  scope = NULL,
  pkce = TRUE,
  auth_params = list(state = "abcdefgh"),
  token_params = list(state = "abcdefgh"),
  redirect_uri = "https://google.com/callback",
  cache_disk = FALSE,
  cache_key = NULL
)

req_dry_run(req2)
req_perform(req2)

如您所见,我尝试多次指定状态参数 (

list(state = "abcdefgh")
),如函数文档所建议。

当您执行上面的代码时,您会发现自己在函数中处于调试模式

oauth_flow_auth_code_url
。然后,在R控制台中执行
print(state)
,你会发现状态的值不是
"abcdefgh"
,而是一个随机字符串。

我这里有什么问题吗?有什么提示吗?预先感谢您!

r httr2
1个回答
0
投票

根据源代码,

state
对象总是随机创建并传入
oauth_flow_auth_code_url()
。所以,手动配置好像不太可能。

来源:https://github.com/r-lib/httr2/blob/6f78779b43bc060cbc9a7d66614028aff499c355/R/oauth-flow-auth-code.R#L161

© www.soinside.com 2019 - 2024. All rights reserved.