我正在 GAS 中实现 OAuth1 授权,截至 2024 年 10 月 31 日,我想知道 .setCallbackFunction('authCallback') 对于 OAuth1 授权方法是否确实必要。
以下是我如何设置方法来测试其必要性:
OAuth1.createService("twitter")
...
.setAccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
.setCallbackFunction('authCallback')
我定义了一个回调函数,但是我没有看到“允许这个应用程序连接?”初次授权时有提示。我还删除了 .setCallbackFunction('authCallback') 行并重新授权,没有遇到任何错误:
const authCallback = (request: GoogleAppsScript.URL_Fetch.CallbackRequest): GoogleAppsScript.HTML.HtmlOutput => {
const service: OAuth1.Service = getXService();
const authorized: boolean = service.handleCallback(request);
if (authorized) {
return HtmlService.createHtmlOutput('success');
} else {
return HtmlService.createHtmlOutput('fail');
}
};
我也尝试过使用reset()来清除授权并重新开始,但我仍然没有看到任何请求连接权限的提示。
这里有一个关于 Google Apps 脚本 (GAS) 中的 OAuth1 是否真正需要 authCallback 函数的查询。 如果您知道任何文章或资源可以阐明: 我非常感谢有关此主题的任何见解或资源!
或者,如果有其他方法可以有效地重置授权,您可以分享一下该方法吗?
另外,我删除了X的开发者工具中注册的重定向URL,授权仍然成功。
ローカルsutoreージおよびクッキーの削除
是的,在这种特定情况下,3 足 oauth1.0 流需要回调 URI。具体来说,服务器将发送
oauth_verifier
令牌,这是进一步的身份验证流程所需要的。这是在 RFC5849 § 2.2、 中指定的
...确保授予访问权限的资源所有者是相同的 资源所有者返回给客户端以完成该过程, 服务器必须生成一个验证码:一个不可猜测的值 通过资源所有者传递给客户端并需要完成 过程....
一旦授权,服务器不需要再次重新授权,如§ 4.15中所述
...服务器可能希望自动处理授权请求 (第 2.2 节)来自先前已授权的客户 资源所有者。
但是,在 Twitter 的具体情况下,如它的文档
中所写用户将始终被提示授权访问您的应用程序,即使之前已授予访问权限。
因此,这种情况下应该总是出现授权提示。如果没有,那么客户端首先不会重定向到服务器。这可能意味着访问令牌不会被删除,或者您错误地假设请求已获得授权。您可以按照文档中的说明使令牌无效/重新生成以强制 Oauth 流程。