用户身份验证与授权
实现安全的登录系统,并控制用户对不同功能和数据的访问权限。
用户身份验证与授权 是 CoddyKit 上的免费 AI SaaS Builder 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI SaaS Builder 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI SaaS Builder 课程共包含 4 节课。
欢迎学习安全访问!
在本课中,我们将深入了解用户身份验证和授权。对于任何安全应用,尤其是 AI SaaS 而言,这些机制都至关重要,可确保只有正确的用户才能访问相应的功能。
您可以把它们想象成专属 AI 俱乐部的保安和宾客名单!
证明您的身份
身份验证(AuthN)是验证用户身份的过程。它回答的问题是:“您是您所声称的那个人吗?”
- 用户名/密码:最常见的方法。
- OAuth:使用 Google、Facebook 等账号登录。
- 生物识别:指纹、人脸 ID。
完成身份验证后,系统就知道您是谁了。
您可以执行哪些操作?
授权(AuthZ)决定经过身份验证的用户可以执行哪些操作或访问哪些内容。它回答的问题是:“既然我们知道您是谁,那么您拥有哪些权限?”
例如,管理员用户可能可以访问所有设置,而普通用户只能查看自己的数据。
保护密码安全
绝不要以明文存储用户密码!相反,请使用一种称为哈希的单向加密函数。哈希会将密码转换为固定长度的字符字符串。
即使您的数据库遭到入侵,攻击者也无法获得实际密码,只能得到密码的哈希值。您无法通过哈希值反推出原始密码。
哈希实践
下面是一个经过简化的 Java 示例,用于演示密码可能是如何进行哈希处理的。实际应用会使用 bcrypt 或 Argon2 等更强大的算法,并且通常会加入“盐值”来进一步增强安全性。
请尝试运行此示例:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
String password = "mySecretPassword123";
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(
password.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder(2 * encodedhash.length);
for (int i = 0; i < encodedhash.length; i++) {
String hex = Integer.toHexString(0xff & encodedhash[i]);
if(hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
System.out.println("Original: " + password);
System.out.println("Hashed: " + hexString.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}传统会话
许多 Web 应用使用基于会话的身份验证。用户登录后,服务器会创建一个唯一的会话 ID,将其存储起来(通常存储在数据库中),然后以 Cookie 的形式发送给客户端。
后续请求中,客户端会发送会话 ID,服务器则对其进行验证。这种方法将状态保存在服务器上。
认识 JWT
对于可扩展的 API,尤其是微服务,JSON Web Token(JWT)非常受欢迎。JWT 是无状态的,这意味着服务器无需存储会话信息。
JWT 包含有关用户的信息(声明),由服务器进行签名后发送给客户端。客户端会在每个请求中携带它。
JWT 的结构
JWT 由三个部分组成,各部分之间使用句点分隔:
- 标头:包含令牌类型(JWT)和签名算法(例如 HS256)。
- 载荷:包含用户 ID、角色、过期时间等“声明”。
- 签名:用于验证令牌是否被篡改。它使用标头、载荷和密钥创建。
签名是安全性的关键。
使用 RBAC 管理访问权限
基于角色的访问控制(RBAC)是一种常见的授权模型。系统会为用户分配角色(例如“管理员”“编辑者”“查看者”),并为角色授予执行特定操作的权限。
- 管理员:可以创建、读取、更新和删除任意数据。
- 编辑者:可以创建和更新自己的数据。
- 查看者:只能读取数据。
这样可以简化对大量用户权限的管理。
API 授权逻辑
在您的后端中,用户通过身份验证后,您需要检查其对特定 API 端点的授权情况。这通常涉及中间件或拦截器,它们会:
- 从用户的 JWT 或会话中提取其角色和权限。
- 检查用户的角色是否拥有执行请求操作的权限。
- 如果没有,则拒绝访问(例如返回 403 禁止访问错误)。
快速检查
请设想一位用户尝试访问您的 AI SaaS 中的高级功能。
保护您的后端
做得很好!您已经学习了用户身份验证和授权的基本概念。
- 身份验证:验证用户“是谁”。
- 授权:决定用户“可以做什么”。
- 我们还了解了安全的密码哈希处理、基于会话与无状态 JWT 身份验证的区别,以及用于管理权限的 RBAC。
正确实现这些机制,对于构建安全且具备良好扩展能力的 AI SaaS 后端至关重要!
常见问题解答
「用户身份验证与授权」课时是免费的吗?
是的 — 「用户身份验证与授权」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI SaaS Builder 课程的其余内容,请升级到 CoddyKit PRO。 AI SaaS Builder 课程共包含 4 节课。
「用户身份验证与授权」这节课中我会学到什么?
实现安全的登录系统,并控制用户对不同功能和数据的访问权限。 你通过在浏览器中直接运行的动手代码来练习 AI SaaS Builder,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI SaaS Builder 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI SaaS Builder 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「用户身份验证与授权」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI SaaS Builder 课中编写并运行代码吗?
能。每节 AI SaaS Builder 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。