我尝试使用 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"
,而是一个随机字符串。
我这里有什么问题吗?有什么提示吗?预先感谢您!
根据源代码,
state
对象总是随机创建并传入oauth_flow_auth_code_url()
。所以,手动配置好像不太可能。