AIGC标识 点一下"用微信登录",为什么要跳出去、又跳回来?一次讲清 OAuth

点"用微信登录",页面唰地跳走,过一秒又跳回来,你已经登上了。多跳这一下,到底图什么?

因为安全的做法是:从头到尾,都不把你的密码交出去。

一、过去:直接把密码给第三方

二十年前,想让一个网站去读你另一处的东西,你就得把密码递给它。方便,代价却大:

  • 它会把密码存下来,甚至存成明文;
  • 它拿到的是"全套",能做你没答应的事;
  • 你哪天反悔,只能改密码——可一改,别处也全得重登。
这正是 RFC 9700 所说的"密码反模式"。

二、现在:跳出去、点个头、带张小票回来

办法换了——密码不给了。你点"用微信登录":

  • 先跳到微信那边;
  • 在微信里登好,点一下同意;
  • 带着一张只能用一次的小票(行话叫授权码)跳回原网站;
  • 网站拿小票,去微信换一张"出入牌"(access token)。

全程,网站没碰过你的密码,只见过这张出入牌。

三、这张"牌"能干嘛:范围 + 时效

出入牌上写着三件事:替谁来的、到多久、能干嘛。

  • 能干嘛,是你在同意页上勾的那几样:只勾了昵称和头像,它就只看得到这两样;
  • 没勾的,牌上没写,门卫就不让(这就是 scope,RFC 6749 §3.3);
  • 牌还有到期时间,一到就作废;想提前收回,去"授权管理"里点一下即可。

四、它怎么长成这样:1.0 → 2.0 → 补漏

阶段 时间 关键变化
OAuth 1.0 2010(RFC 5849,已废弃) 第一版,太绕,各家各写各的
OAuth 2.0 2012(RFC 6749) 重写成一版通用的;授权码换一次作废
补漏 PKCE 2015(RFC 7636) 小票万一被半路截走,加一道暗记,验不过就用不了
安全最佳实践 2025(RFC 9700) 弃用隐式流、强制 PKCE 等

五、真正的口子:同意那一步

危险不在密码,在你这一头。2022 年就出过事:有人做了假应用,骗人点"同意",之后一直能读邮件、看日历(微软官方 + Proofpoint 披露)。

所以"跳出去那一下",是留给你一次看清的机会:看清是谁在问、要哪几样,再点头。

六、三个容易想歪的地方

  • "用第三方登录" ≠ 这个网站安全——你的密码只给了微信,网站从没拿到;
  • OAuth 不是"登录协议"——它管授权;"你是谁"是 OIDC 的事;
  • 点了同意 ≠ 万事大吉——随时能在"授权管理"里收回。

七、一句话带走

用第三方登录,网站从头到尾没拿到你的密码;它拿到的,是一张有范围、有时效、你能随时收回的出入牌。

以上实践来自我们构建身份层 Autional 的经验:授权码 + 一次性校验(PKCE)、同意页列明范围且可撤回、"你是谁"交给专门的身份层协议。官网:https://www.autional.com

参考:RFC 6749、RFC 7636、RFC 9700、RFC 5849、OpenID Connect Core 1.0;案例:微软同意钓鱼(2022)。

posted on 2026-10-11 12:06  小摘  阅读(4)  评论(0)    收藏  举报

导航