使用Authlib与OAuth2认证Twitter API 2.0时出现Error code 215问题
解决Twitter OAuth2.0授权报错「Bad Authentication data (215)」
以下是针对问题的具体排查和修复方案:
核心问题:授权端点错误
你当前使用的授权地址 https://api.twitter.com/2/oauth2/authorize 是错误的,Twitter OAuth2.0的用户授权页面端点应为 https://twitter.com/i/oauth2/authorize,api.twitter.com 下的地址仅用于交换令牌,而非用户授权跳转的入口——这是导致215错误的最可能原因。
修正后的完整代码示例
1. 初始化OAuth2Session与生成授权URL
from authlib.integrations.flask_client import OAuth2Session # 正确的授权端点和令牌端点 authorization_url = 'https://twitter.com/i/oauth2/authorize' token_url = 'https://api.twitter.com/2/oauth2/token' # 配置参数 client_id = '你的Client ID' client_secret = '你的Client Secret' scopes = ['tweet.read', 'tweet.write', 'users.read'] scope = ' '.join(scopes) callback_uri = 'http://127.0.0.1:5000/oauth/callback' # 授权码流程的授权阶段不需要传入client_secret client = OAuth2Session(client_id, scope=scope, redirect_uri=callback_uri) # 生成授权URL auth_url, state = client.create_authorization_url(authorization_url) print(f"授权URL: {auth_url}")
2. Flask回调路由实现
from flask import Flask, request app = Flask(__name__) @app.route("/oauth/callback", methods=["GET"]) def callback(): # 交换令牌时才需要传入client_secret token = client.fetch_token( token_url, client_secret=client_secret, authorization_response=request.url ) # 验证令牌有效性或执行后续逻辑 print(f"获取到的令牌: {token}") return "授权成功" if __name__ == "__main__": app.run(debug=True)
关键配置检查项
- 回调URI精确匹配:确保Twitter开发者平台中配置的回调URI与代码中的
callback_uri完全一致,包括协议(http/https)、主机(127.0.0.1不能换成localhost)、端口、路径,任何细微差异都会导致认证失败。 - OAuth2.0流程启用:在Twitter Developer Portal的「Authentication Settings」中,开启OAuth 2.0并启用「Authorization Code Flow with PKCE」(Authlib默认支持PKCE,Twitter强制要求该流程)。
- 权限范围配置:在「Authentication Settings」的「Scopes」部分,勾选你需要的权限(
tweet.read、tweet.write、users.read),保存后等待配置生效。 - Client ID正确性:确认复制的Client ID是完整的字符串,没有遗漏或多余字符,重新生成后务必完整复制。
内容的提问来源于stack exchange,提问作者Ben Myers
相关产品推荐
相关产品推荐

