【发布时间】:2023-03-08 09:04:01
【问题描述】:
为什么我被社区评为-4? 没有人知道答案,所以他们给我-4问你无法弄清楚的问题?请解释一下……这个问题技术性很强,很难,值得社区做出更好的反应。除非我会开始问简单的问题...
我得到的错误答案: 1.“只需使用您的用户名和密码调用 OAuth 端点” 不,我跟踪了从登录到跟随操作的所有浏览器请求(当需要不记名令牌时),并且浏览器在任何时候都不会调用服务器来获取不记名令牌。所以这并不容易。尽管如此,当您想要执行诸如跟随之类的操作时,浏览器在登录后发送它时具有不记名令牌。 (这就是它从登录数据在 JS 中生成它的原因)
“只需使用 auth_toekn” 不,auth_token和bearer都是需要的,并且在你关注时发送,如果缺少一个,调用将失败,并且它们彼此非常不同......
请不要回答 twitter 有 API,我知道这不是问题所在。
对于真正高级的开发人员来说,这是一个难题。我正在尝试研究 Twitter 如何创建 Bearer_token。此令牌稍后会在登录后提供以关注或执行任何其他操作。
我安装了 fiddler,在通过 Twitter 网站(不是应用程序或任何东西)成功登录后,Twitter 调用: https://twitter.com/sessions
此函数返回 5 个 cookie:
set-cookie: fm=0; Expires=Mon, 19 Mar 2018 23:58:22 GMT; Path=/; Domain=.twitter.com; Secure; HTTPOnly
set-cookie: ads_prefs="HBERAAA="; Expires=Thu, 16 Mar 2028 23:58:32 GMT; Path=/; Domain=.twitter.com
set-cookie: kdt=1lMiTzCNWYEh4IrZmXmF1t9cjAT4LNVfUhfvBIa5; Expires=Tue, 17 Sep 2019 23:58:32 GMT; Path=/; Domain=.twitter.com; Secure; HTTPOnly
set-cookie: _twitter_sess=BAh7CiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo%250ASGFzaHsABjoKQHVzZWR7ADoPY3JlYXRlZF9hdGwrCMcps0BiAToMY3NyZl9p%250AZCIlZWM2ZmU1M2RlOGU3NmI4Yzc4ZDY4MTg3YmFiMmNlZTk6B2lkIiUyOTg4%250AOGE4NTY0MDNmNTY5NGU0YzM0MTI2ZjNkNWNhZjoJdXNlcmwrB5ynikA%253D--dc71be55646bbc98ff0043e50e7fe15c4fa80cc4; Path=/; Domain=.twitter.com; Secure; HTTPOnly
set-cookie: remember_checked_on=1; Expires=Thu, 16 Mar 2028 23:58:32 GMT; Path=/; Domain=.twitter.com
set-cookie: twid="u=1082828700"; Expires=Thu, 16 Mar 2028 23:58:32 GMT; Path=/; Domain=.twitter.com; Secure
设置cookie:auth_token=7d7c0e23f8c669ff78b921b5a451c7e60f001b6b;到期=格林威治标准时间 2028 年 3 月 16 日星期四 23:58:32;路径=/;域名=.twitter.com;安全的;仅 HTTP
后来当我关注某人的推特电话时: https://api.twitter.com/1.1/friendships/create.json 在此发布请求上发送的标头中,一个重要的标头是: “授权:承载” AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw
我的问题很简单,但对我的研究很重要,这个 Bearer 令牌是如何创建的?
显然它是通过 Js 在客户端创建的,因为检查从登录到关注的所有 twitter 调用(使用承载的地方)没有其他调用,调用服务器以获取承载令牌。这是经过长期研究的事实
我怀疑通过一些 某种编码,auth_token、twid 或 kdt 或登录后发送给我的这些标头的组合,在客户端创建不记名令牌,然后发送到服务器。
在调查了 twitter 的所有 js 文件(并使用在线工具取消缩小它们)之后,我想出了一些创建它的函数,但仍然找不到在我这边创建不记名令牌的方法? 任何帮助都将受到高度赞赏,我相信这个概念是通过从登录 cookie 获取的数据在客户端生成的简单不记名令牌。但我不知道怎么做,而且js很难理解....
以下是从 3 个文件中截取的一些片段:
<link rel="preload" href="https://abs.twimg.com/k/en/init.en.ace7071c803c455c5d97.js" as="script">
<link rel="preload" href="https://abs.twimg.com/k/en/0.commons.en.de7b4986f9ad407bc0e4.js" as="script">
<link rel="preload" href="https://abs.twimg.com/k/en/8.pages_home.en.9ee19c8cf9256226b254.js" as="script">
this._addBearerTokenToUrl = function(t, e) {
return t ? h.a.addToUrl(e, {
bearer_token: t
}) : e
function n() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : u;
return function(e, i) {
var n = {
authorization: "Bearer " + t
};
a.a.user.id && (n["x-twitter-auth-type"] = "OAuth2Session");
var o = Object(r.a)(c);
return o && (n["x-csrf-token"] = o), e.headers = s({}, e.headers, n), i(e)
}
}
function n() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : u;
return function(e, i) {
var n = {
authorization: "Bearer " + t
};
a.a.user.id && (n["x-twitter-auth-type"] = "OAuth2Session");
var o = Object(r.a)(c);
return o && (n["x-csrf-token"] = o), e.headers = s({}, e.headers, n), i(e)
}
}
if (i.useOAuthSessionAuth) {
var E = this.getCsrfToken();
S = {
authorization: "Bearer " + k,
"x-twitter-auth-type": "OAuth2Session",
"x-csrf-token": E
}, x = {
withCredentials: !0
}
}
【问题讨论】:
-
简而言之:我希望能够在成功登录后从检索到的数据中自己创建不记名令牌...
-
我希望那不是真正的代币...如果是这样,您将您的 Twitter 帐户暴露给我们和世界上的其他所有人。
-
您被否决是因为@PatrickHofman 的回答是正确的。 IMO,这也是一个很好的答案,因为他解释了为什么你不能做你想做的事。欲了解更多信息,请访问oauth.net 了解为什么您不能生成自己的令牌。
-
你能告诉我你从哪里得到这些sn-ps吗?
标签: c# twitter oauth httprequest token