【问题标题】:Researching how Bearer Token is created by Twitter website研究 Twitter 网站如何创建 Bearer Token
【发布时间】:2023-03-08 09:04:01
【问题描述】:

为什么我被社区评为-4? 没有人知道答案,所以他们给我-4问你无法弄清楚的问题?请解释一下……这个问题技术性很强,很难,值得社区做出更好的反应。除非我会开始问简单的问题...

我得到的错误答案: 1.“只需使用您的用户名和密码调用 OAuth 端点” 不,我跟踪了从登录到跟随操作的所有浏览器请求(当需要不记名令牌时),并且浏览器在任何时候都不会调用服务器来获取不记名令牌。所以这并不容易。尽管如此,当您想要执行诸如跟随之类的操作时,浏览器在登录后发送它时具有不记名令牌。 (这就是它从登录数据在 JS 中生成它的原因)

  1. “只需​​使用 auth_toekn” 不,auth_token和bearer都是需要的,并且在你关注时发送,如果缺少一个,调用将失败,并且它们彼此非常不同......

  2. 请不要回答 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 令牌是如何创建的?

  1. 显然它是通过 Js 在客户端创建的,因为检查从登录到关注的所有 twitter 调用(使用承载的地方)没有其他调用,调用服务器以获取承载令牌。这是经过长期研究的事实

  2. 我怀疑通过一些 某种编码,auth_token、twid 或 kdt 或登录后发送给我的这些标头的组合,在客户端创建不记名令牌,然后发送到服务器。

  3. 在调查了 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


【解决方案1】:

这个 Bearer 令牌是如何创建的?

这是特定于服务器实现的,但可以肯定它不是在客户端生成的。该令牌包含一些可以将该令牌返回给您的用户的信息(类似于您的登录 cookie)。

您不能自己生成此类令牌。如果可以的话,你可以在不知情的情况下为我创建一个,这是一个巨大的安全漏洞。但是,您可以通过某种身份验证端点获取令牌,通常是 OAuth 之类的东西(您可以在Twitter docs 中阅读更多信息)。

据我所知,OWIN(ASP.NET OAuth 服务器实现)使用一种加密机制,该机制使用在machine.config 中注册的机器密钥作为输入,以确保只有适当的服务器才能解密令牌。

【讨论】:

  • 感谢您的回答,但您的回答完全错误。
  • 感谢您的回答,但您的回答完全错误。 1. 这不是安全漏洞,我知道我的用户和密码,所以我可以创建我的令牌,通过调用服务器或任何其他方式。这并不意味着任何安全性 2. 我没有发现在服务器上创建不记名令牌的函数,当然我看不到服务器调用,但我可以跟踪服务器的所有提琴手调用,它不要求他生成不记名令牌
  • 3.您可以在 JS 中看到承载令牌是在 clinet 上生成的。因为它稍后会发送到服务器 4. 我想要的很简单,能够从我的用户名和密码生成不记名令牌,如果它是在服务器上生成的很好,什么调用是生成它所以我可以自己调用它并得到它,就像浏览器一样(做)
  • 只需调用 OAuth 令牌端点即可将您的用户名和密码交换为令牌。
  • Patrick:我不是假装我知道这一切,我只是说,在使用浏览器和 fiddler 跟踪它之后,没有使用用户和密码生成此令牌的特定调用。此外,您可以从片段中清楚地看到他们以某种方式在 JS 中创建它(当然在登录后使用数据),但我不知道如何......
【解决方案2】:

当您在 twitter 中加载主页时,内容中会出现裸露的内容,我通常从那里提取它,但我没有找到对服务器端代码的请求来自哪里,您也必须等到页面加载然后提取身份验证令牌

搜索:bearer_token

而且令牌只在登录时收到一次然后缓存如果你提取缓存你可能会在那里找到它,尝试监控登录请求并确保你清除缓存以找到请求

【讨论】:

  • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
  • 你在说什么,我只是添加答案
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 2020-06-23
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2013-09-19
  • 2014-10-28
相关资源
最近更新 更多