身份验证
Authentication也常被叫作:登录验身份认证Auth
「让系统确认「你真的是你说的那个人」,登录、输密码、扫验证码都算。」
身份验证 Authentication
确认「你是谁」的过程;跟「你能做什么」(权限)是两件完全不同的事。
身份验证回答一个问题:当前这个人,真是他声称的那个人吗? 输密码、扫二维码、收短信验证码、用指纹,都是回答这个问题的不同办法。它只关心「你是谁」,完全不关心「你能不能看这份报告」——后者是权限(Authorization)的事,本站单独有一条词条讲。
最常见的误区是把「登录成功了」当成「安全了」。登录成功只说明系统认出了你,不说明系统防住了别人。真正的风险点常在后头:密码存在哪、接口有没有做二次校验、登录状态(会话/token)能活多久、过期之后会不会静默地把别人的账号数据漏出来。
还要记住一句:「能点进去」和「真的登录成功」不是一回事。 前端把页面渲染出来了,不代表后端验证通过了。很多 AI 做的登录页,点「登录」只是把页面跳了跳、或者把用户名存进了本地,根本没人去服务器核对密码。这是最典型的「看起来完成了」的假象。
长什么样 真实可交互,不是截图
登录
上面那行状态条的意思是:身份验证是一个「验证过了 → 然后过期」的过程,不是登录一次就永远有效。
拆开看,里面有这几块
-
1
凭证 Credential
证明你身份的凭据:密码、验证码、密钥、指纹。别人拿不到,才能证明是你。
-
2
登录表单 Login form
收集凭证的入口。前端只负责把凭证交给后端,真正的核对必须在服务器做。
-
3
会话 / Token Session / Token
登录成功后发给你的「通行证」,之后每个请求带着它,系统才认你。它有有效期,会过期。
-
4
过期与退出 Expiry / Logout
通行证作废的过程。过期后要重新登录,否则旧凭证可能一直能用。
常见的有哪几种
最常见,也最容易被滥发凭证或存成明文。
用在:通用场景
一次性验证码,适合找回密码或二次确认。
用在:敏感操作、换设备
用微信 / 谷歌 / 公司账号登录,自己不用管密码。
用在:不想自建账号体系
密码之外再加一道,比如动态码。
用在:账号里有钱或有敏感数据
容易搞混?这样区分
什么时候用得上
先想清楚谁是你的「有效用户」:自己用?朋友用?公开注册?决定要不要验证码、第三方登录。
通过已验证的邮箱 / 手机号发重置链接,链接要一次性且限时。
不只看页面,要真的登进去访问一个需要登录才能看的内容,确认后端认得你。
你可以这样跟 AI 说
直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。
【任务】给我的 [项目名] 做一个邮箱 + 密码的登录功能 【范围】只做登录与登出,不做注册、不做找回密码、不做第三方登录 【边界】 - 密码不能明文、可逆加密、Base64 或单次快速哈希保存;优先使用框架成熟方案与带独立盐的慢哈希(Argon2id、bcrypt 或 scrypt),不要自创算法;也不能把密码打印到日志 - 登录校验必须在后端做,前端只负责把凭证发给后端,不得用「前端写死密码比对」冒充 - 登录成功后要有一个会过期的会话或 token,过期后不能继续访问受保护内容 - 不要引入我没让你用的第三方服务 【交付】 1. 登录成功后,我打开哪个地址、输入哪组测试账号能看到什么 2. 密码在数据库/代码里是以什么形式存的(别只说「加密了」,说清是什么形式) 3. 登出之后,旧会话还能不能继续访问——实测给我看 4. 哪些部分你没有验证,为什么
这段把最常翻车的三处点出来了:密码存储形式、后端校验、会话过期。每一条都能落地成一次实测,而不是一句「已完成」。
它说「做好了」,你怎么自己验
这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「主路径」这层:真实用户的正常操作能走通,不靠特殊参数。
要亲眼看到这些,才算数
- 用一组错的密码登录,应该被拒绝并提示错误,而不是照样跳转成功。
- 用一组对的账号密码登录,能看到进入受保护内容的入口,且离开登录页。
- 登录成功后,直接刷新页面,应该仍保持登录状态(不是每刷新一次就要重登)。
- 登出之后,再访问受保护内容,应该被弹回登录页或被拒绝,而不是还能看。
- 多等一会儿(或问清楚会话有效期),过期后旧状态不再有效,而不是一直能用。
- 让 AI 说清密码存储算法、盐和参数;应使用框架成熟方案与 Argon2id、bcrypt 或 scrypt 一类慢哈希,而不是明文、可逆加密、Base64、MD5、SHA-1 或单次 SHA-256。
它常这么糊弄你
- 「登录功能做好了」——但用随便一个错误密码点登录也能进去。这是最典型的假登录:前端根本没让后端核对。
- 「密码已加密」——结果是 Base64、可逆加密、MD5 或单次 SHA-256。密码应使用带独立盐的慢哈希方案;问清算法、盐和参数,别只接受一句「加密了」。
- 「登录成功」——但只在当前页面有效,一刷新就打回原形,会话根本没建立。
- 「已加验证码」——但验证码只是前端显示一下,后端没校验,机器照样能灌。
身份验证一般能验到「主路径」层:你用对/错两组账号亲手点一遍就能判断登录是否真的成立。要往「生产」层走,还需要考虑暴力破解防护、日志脱敏、会话失效回收这些,那不是普通用户第一轮该做的事。
考考你 选一个你觉得对的
AI 说「登录功能做好了,输什么账号都能进去」。最该做的第一件事是?
身份验证的第一步是「能拒绝错误的人」。如果错误密码也能进,说明后端根本没核对,后面全白搭。先验「能不能拦」,再谈「能不能进」。