OAuth2 四种鉴权逻辑

OAuth2 四种鉴权逻辑
四种 OAuth2 授权模式完整对比把每种流程、适用场景一次性讲清前置概念资源所有者用户持有账号密码客户端 Client业务系统 / 前端想拿资源授权服务器 AuthServerSystemB发 Token资源服务器 ResourceServerSystemA存业务数据1. 密码模式 Password GrantResource Owner Password Credentials完整流程客户端直接提交四样参数给/oauth2/tokenusername、password用户账号密码client_id、client_secret授权服务校验账号密码 客户端身份直接返回access_token refresh_token优缺点✅ 流程最简单不用跳转、不用 code ❌ 客户端必须拿到用户明文账号密码极度不安全使用场景仅限内网可信后端工具、开发调试生产对外严禁使用2. 授权码模式 Authorization Code Grant生产首选完整流程用户访问客户端页面未登录自动跳授权服务地址http://8080/oauth2/authorize?client_idxxxredirect_uri回调地址scoperead用户在授权中心输入账号密码登录密码只走 AuthServer客户端看不到登录成功授权服务重定向回调地址URL 拼接临时code一次性、短期有效客户端后端拿着code clientId clientSecret请求/oauth2/token授权服务校验 code下发access_token refresh_token优缺点✅ 密码只在授权中心客户端不接触明文支持单点登录、刷新令牌安全等级最高 ❌ 流程多一次跳转需要后端处理回调使用场景所有带前端页面、多系统 SSO、对外第三方接入标准推荐3. 客户端模式 Client Credentials Grant核心特点无用户参与不存在登录人完整流程客户端仅提交client_id client_secret请求/oauth2/token授权服务只校验客户端身份不需要用户名密码、不需要 code直接返回 access_token令牌内没有用户信息、角色只有客户端标识优缺点✅ 最简单不用用户登录服务之间调用无感知 ❌ 无法绑定操作人员只能代表服务本身使用场景定时任务、后台同步服务、系统间纯后端 RPC 调用不需要登录用户4. 简化模式 Implicit Grant隐式模式现已淘汰核心特点专为纯前端设计无后端中转完整流程浏览器跳转授权登录页登录成功后直接在 URL 哈希 #里返回 access_token不经过后端交换 code没有 refresh_token令牌直接暴露在浏览器地址栏致命缺陷Token 存在浏览器极易被 XSS 窃取无刷新机制安全漏洞极大使用场景Spring Security 6 已弱化支持新项目一律禁止使用全部改用授权码模式前端请求走后端代理交换 code一张表快速区分表格模式获取 Token 凭证是否需要用户登录有无用户信息安全等级适用场景授权码模式临时 code需要有角色 / 权限★★★★★管理后台、多系统 SSO、对外第三方密码模式usernamepassword需要有角色 / 权限★☆☆☆☆内网调试、内部工具禁止对外客户端模式clientIdsecret不需要无用户★★★★定时任务、服务间后台同步隐式简化模式直接跳转返回 token需要有角色 / 权限★☆☆☆☆淘汰不推荐任何场景关键补充区分点密码模式 vs 授权码密码模式客户端直接拿用户密码 授权码密码全程只在授权中心客户端只能拿到临时 code后端交换令牌。客户端模式和另外三者最大区别不需要用户不存在登录操作令牌只代表服务身份无法做用户级权限控制只能做服务鉴权。隐式模式为什么淘汰 token 放在浏览器 url 哈希前端 JS 可直接读取极易被盗没有后端中转保护现在统一用授权码 后端代理替代。