httr2库中如何用auth_code实现fetch_token等价功能
R语言httr2实现授权码换取双令牌方法
你已完成授权码(AUTHORIZATION_CODE)获取的前置步骤后,可按以下两种方式实现Python中fetch_token同等逻辑,返回结果会同时包含access token和refresh token。
方式1:使用封装好的标准授权码流程(推荐)
你不需要手动编写生成跳转链接、监听回调、换令牌的分步逻辑,httr2内置的oauth_flow_auth_code()函数会自动完成全流程操作:
library(httr2) # 初始化OAuth客户端,和你已有代码逻辑一致 client <- oauth_client( token_url = token_grant_url, secret = .app_secret, id = .app_key ) # 执行完整授权码流程:自动生成跳转链接、拉起浏览器、接收回调、用授权码换取令牌 token_response <- oauth_flow_auth_code( client = client, auth_url = auth_url, scope = SCOPES_TO_REQUEST, # 函数内部自动处理scope的空格拼接,无需手动调用paste0 redirect_uri = .client_redirect, state = STATE )
返回的token_response为列表结构,可直接通过token_response$access_token获取访问令牌,token_response$refresh_token获取刷新令牌,和Python侧fetch_token返回的字段完全对应。
方式2:已手动拿到授权码时的底层实现
如果你已经通过其他方式拿到了AUTHORIZATION_CODE,不需要函数自动处理浏览器跳转和回调,可以直接构造POST请求调用令牌接口:
library(httr2) client <- oauth_client( token_url = token_grant_url, secret = .app_secret, id = .app_key ) # 手动构造授权码换令牌请求 token_response <- request(token_grant_url) |> # 自动按OAuth2规范添加客户端认证信息,无需手动传client_secret oauth_client_req_auth(client = client) |> req_body_form( grant_type = "authorization_code", code = AUTHORIZATION_CODE, redirect_uri = .client_redirect ) |> req_perform() |> resp_body_json()
注意事项
- 请确保你申请的
SCOPES_TO_REQUEST中包含了offline_access类的权限,否则OAuth服务端不会返回refresh_token字段 - 不要手动在请求表单中重复添加
client_secret参数,oauth_client_req_auth()会自动适配服务端要求,把客户端凭证放到请求头或表单参数的正确位置
内容的提问来源于stack exchange,提问作者vanhry
相关产品推荐
相关产品推荐

