GitHub OAuth2 回调拿不到 code 是因 redirect_uri 未严格全量字符串匹配,包括协议、大小写、端口、末尾斜杠等;换 token 须用 application/x-www-form-urlencoded 格式传参,不可用 JSON;微信需用 sns_access_token 调用 sns 接口;务必校验 scope 和 state。

Python OAuth2.0怎么接_GitHub/微信第三方登录授权开发

GitHub OAuth2 授权回调拿不到 code?检查 redirect_uri 是否完全一致

GitHub 对 redirect_uri 的匹配是**严格全量字符串比对**,连末尾斜杠、协议大小写、端口(哪怕默认 80/443)都必须一模一样。本地开发时常见错误是前端跳 GitHub 登录页传的是 http://localhost:3000/callback,后端收到回调却监听在 http://127.0.0.1:3000/callback —— 这俩不等价,GitHub 就直接报 redirect_uri_mismatch 错误。

用 requests.post 换 token 却返回 401?注意 GitHub 要求 application/x-www-form-urlencoded

GitHub 的 token 交换接口(https://github.com/login/oauth/access_token)明确要求 Content-Type: application/x-www-form-urlencoded,且参数不能放 JSON body 里。用 requests.post(json={...}) 或直接传 dict 当 data 但没设 headers,大概率得个空响应或 401。

微信网页授权 getAccessToken 失败?确认你用的是 sns_access_token,不是基础 access_token

微信有两个 access_token:全局的 access_token(用于管理类接口),和用户级的 sns_access_token(用于获取用户信息)。网页授权流程中,用 code 换回来的是后者,它有效期只有 2 小时,且绑定 openidscope=snsapi_userinfo。拿它去调用 https://api.weixin.qq.com/cgi-bin/user/info 会失败,因为那是基础 token 的接口。

Flask/FastAPI 中处理 OAuth 回调时,为什么用户信息总为空?别漏掉 scope 和 state 校验

GitHub 默认只返回 user:email 权限下的邮箱(还可能是私密邮箱),微信默认只返回 openid;不显式申明 scope,就拿不到昵称、头像这些。另外,state 不校验等于把登录入口敞开——攻击者可以伪造回调,把别人的 code 塞给你,冒充登录。

事情说清了就结束。OAuth 流程里最麻烦的从来不是写几行代码,而是每个环节的边界条件:URL 字符串是否精确匹配、HTTP 头和 body 格式是否符合文档、token 类型和作用域是否对得上、state 和 scope 这些看似可选实则关键的字段有没有被忽略。
本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。