要使用推特(Twitter 或者说叫 X 站) OAuth 2.0 服务登录第三方网站,你一般需要进行以下 3 步的操作配置(注意需科学上网,不然会连接超时):
- 第 1 步:在 Twitter 开发者后台创建一个应用,并配置客户端 ID、客户端密钥和重定向地址(回调地址)。
- 第 2 步:根据客户端 ID、客户端密钥和回调地址构造登录页面,让用户授权,以获取访问令牌(Token)。
- 第 3 步:有了访问令牌就能够访问 Twitter 的开放资源。
在开始之前,我们先来了解一下什么是 OAuth 2.0?
什么是 OAuth 2.0?
OAuth 2.0 是一种开放标准的授权协议,用于授权第三方应用程序访问受保护的资源,而无需提供用户的用户名和密码。它允许用户在不直接向第三方应用程序披露其凭据的情况下,授权其访问受保护资源,OAuth 2.0 被广泛用于 Web 和移动应用程序中,以提供安全的授权机制。
OAuth 2.0 协议涉及以下角色:
- 资源所有者(Resource Owner):通常是用户,拥有受保护的资源,例如图片、个人资料等。
- 客户端(Client):第三方应用程序,想要访问资源所有者的受保护资源。
- 授权服务器(Authorization Server):负责认证资源所有者并授权客户端访问资源的服务器。
- 资源服务器(Resource Server):存储受保护资源的服务器,提供访问受保护资源的 API。

OAuth 2.0 协议通过授权流程(Authorization Flow)来实现授权。其中,常见的授权流程包括:
- 授权码授权流程(Authorization Code Grant):客户端重定向用户到授权服务器,用户登录并授权后,授权服务器返回授权码给客户端,客户端使用授权码与客户端凭证交换访问令牌。
- 授权码授权流程,带有 PKCE (Authorization Code Grant,With PKCE):与标准授权码模式相同,但客户端需要使用 PKCE(Proof Key for Code Exchange)来增强安全性。
- 密码授权流程(Resource Owner Password Credentials Grant):资源所有者直接将用户名和密码提供给客户端,客户端使用这些凭据向授权服务器请求访问令牌。
- 客户端凭证授权流程(Client Credentials Grant):客户端使用自己的凭据直接向授权服务器请求访问令牌,适用于客户端自身需要访问资源的情况。
- 隐式授权流程(Implicit Grant):用于在浏览器中直接从客户端获得访问令牌,通常用于 Web 前端应用。
Twitter 使用的 OAuth 2.0 授权流程就是“授权码授权流程,带有 PKCE (Authorization Code,With PKCE)”,下面就来介绍一下怎么实现,并讲述如何在 Apifox 中调试。

步骤 1:获取客户端 ID 和客户端密钥
首先,来到 Twitter 开发者中心,如果没有账户,就先创建一个账户再进入,然后在里面,会自动给你创建一个初始的应用,如果没有,需自行创建一个,然后在应用页面的下方,应该会有“User authentication settings”的设置项,点击“Edit”进入到编辑页。

在“User authentication settings”页,需给你的应用设置权限,具体选什么要根据你的业务进行选择。

接着在下方,配置回调地址(Callback URI),也就是重定向 URL。这个回调地址可以填你的网站域名,如果是在本地开发,也可以填你的本地地址,比如http://127.0.0.1:8080/callback
,你必须要保证你的回调地址可可以正常访问。下一必填项的网站地址(Website URL),可以填你的网站域名,如果还没有准备好域名,先随便填一个也可以。

上面的配置都填写后,点击“Save”保存即可,这个时候,就会生成客户端 ID(Client ID) 和客户端密钥(Client Secret),记得复制下来保存好,如果忘记了,需要重新生成,在应用中点击“Keys and tokens”,页面往下滚动即可看到。


以上信息配置完成之后,我们正式进入 OAuth 2.0 授权的主流程。
步骤 2:获取访问令牌
当上文的第一步准备好以后,我们就可以去申请访问令牌(Token),获取访问令牌这一步,我们通过 Apifox 来演示,Apifox 是一款非常优秀的接口调试、管理工具,你可以在 Apifox 中直接获取到 Token 访问令牌。如果你还没有安装 Apifox,现在就去下载一个吧!

1.新建 HTTP 请求
在 Apifox 中新建一个 HTTP 项目后打开,然后在项目里新建一个请求,选择【修改文档 -> Auth -> OAuth 2.0】选项。

2.选择授权模式为“PKCE”
Apifox 中 OAuth 2.0 默认选择的授权模式为 Authorization Code(授权码模式),因为 Twitter OAuth 2.0 用的是 Authorization Code(With PKCE)(授权码模式,带有 PKCE),所以你需要在“授权模式”这里做相应的切换。

3.配置客户端 ID、客户端密钥和重定向地址
接着在页面下方找到 Client ID 和 Callback URL,将从 Twitter OAuth 2.0 服务中获取到的客户端 ID(Client ID) 、客户端密钥(Client Secret)以及配置的回调地址(Callback URI)填进去即可,具体参数就是上文在“步骤一”中的配置。

4.配置授权码的请求地址
根据 Twitter 官方文档的描述,在进行 OAuth 2.0 认证时,授权码的请求地址(Auth URL)是:
https://twitter.com/i/oauth2/authorize
将这个授权码的请求地址填写到 Auth URL 里即可,这个地址我们可以把它理解为登录授权页面,在首次校验登录状态时会打开这个页面(在客户端是窗口),然后让你填写用户名和密码。

一般在手动构造登录授权页面的时候,这个授权地址的后面还需要携带一些参数,比如像这样的:
https://twitter.com/i/oauth2/authorize?
response_type=code&
client_id=M1M5R3BMVy13QmpScXkzTUt5OE46MTpjaQ&
redirect_uri=https://www.example.com&scope=tweet.read%20users.read%20offline.access&
state=state&
code_challenge=challenge&
code_challenge_method=plain
注:正常情况下无需进行参数换行
但是,在 Apifox 中,后面的参数一般就不需要了,只要问号?
前面的路径就行,因为其它必填参数已单独在其它选项中配置,当然如果你想携带一些 Query 参数,你也可以加上,点击该输入框后面的图标即可添加:

我们也可以展开“更多”选项,将需要填写的参数值填写到对应的选项里,比如 “Scope” 里就可以填需要的的权限:tweet.read
、users.read
、offline.access
等。“Code Challenge Method”选项选择“Plain”即可,“Code Challenge Method”指定你用于发出请求的方法,“SHA-256”代表哈希加密传输,“Plain”代表客户端密钥明文地包含在授权请求中。在“State”选项中填写state
,第三方平台要求必填的,我们一般都给它填上,不然会提示“无权限”。

5.配置访问令牌的请求地址
根据 Twitter 官方文档的描述,要申请到访问令牌,需要请求的 URL 为:
https://api.twitter.com/2/oauth2/token

将这个地址填写到 Access Token URL 输入项内即可。

6.获取访问令牌
上文的配置项都设置好以后,就可以点击“获取 Token”按钮来获取访问令牌了。点击后,如果是初次登录,会弹出一个窗口让你授权,填写你的 Twitter 账户的用户名以及密码即可。

填写完用户名密码后,会让你确认授权,点击确认即可。

授权完成后,就会自动获取到访问令牌,并显示在页面上,同时,会将 Twitter 返回的其它信息也一并解析出来。

注意,如果你开了代理,你需要到“设置”里把代理打开,不然有可能会连接失败(需科学上网,不然会连接超时)。遇到其它错误,你可以检查一下是不是某些第三方平台需要的必填参数没有填写,修改错误后,点击“清除 Cookie”并重新获取 Token 即可。

步骤 3:根据 Token 访问开放资源
有了访问令牌(Token)之后,你就可以拿这个访问令牌调取 Twitter 的开放资源了,具体有什么样的开放资源,可以在 Twitter API v2 authentication 中查看。发送请求时 Apifox 会自动将 Token 附加到请求头的Authorization
中,添加至Bearer
后发送出去。如果你要将 Token 携带在 URL 上,你也可以在页面的配置项中修改 Token 的“添加位置”,将其选择为“Query Params”即可。

总结
使用推特(Twitter)OAuth 2.0 服务登录第三方网站的配置分为三步:第一步是在 Twitter 开发者后台创建应用,配置客户端 ID、客户端密钥和重定向地址;第二步是构造登录页面,用户授权后获取访问令牌;第三步是利用访问令牌访问 Twitter 的开放资源。OAuth 2.0 是一种授权协议,通过授权流程实现授权,包括常见的授权码授权流程、密码授权流程等。Twitter 使用的是授权码授权流程带有 PKCE。在实际操作中,通过工具如 Apifox 可以便捷地完成 OAuth 2.0 认证,获取访问令牌,并使用该令牌访问开放资源。
