OAuth 2.0授权框架
字数 965 2025-11-14 01:32:54

OAuth 2.0授权框架

  1. 核心问题:第三方应用访问受限资源
    当您使用某个应用时,可能会遇到“通过微信/谷歌账号登录”或“请求访问网盘文件”的场景。此时第三方应用需要获得您的授权来访问受保护的资源,但直接提供密码给第三方存在安全风险。OAuth 2.0通过授权层分离资源所有者(用户)、客户端(第三方应用)和资源服务器(如云存储),实现安全委托访问。

  2. 核心角色与术语

    • 资源所有者:拥有受保护资源权限的用户
    • 客户端:请求访问资源的第三方应用
    • 授权服务器:验证用户身份并颁发令牌的组件
    • 资源服务器:存储受保护资源的服务(如API服务器)
    • 授权许可:代表用户授权资格的凭证(如授权码)
    • 访问令牌:客户端用于访问资源的数字密钥
  3. 授权流程详解(授权码模式)
    步骤1:客户端将用户重定向至授权服务器,携带以下参数:

    GET /authorize?response_type=code&client_id=APP_ID&redirect_uri=CALLBACK_URL&scope=read
    

    步骤2:用户登录并确认授权后,授权服务器通过302重定向返回授权码至回调地址:

    CALLBACK_URL?code=AUTHORIZATION_CODE
    

    步骤3:客户端在后端用授权码交换访问令牌:

    POST /token  
    Body: grant_type=authorization_code&code=AUTHORIZATION_CODE&client_secret=SECRET
    

    步骤4:授权服务器返回访问令牌和刷新令牌:

    { "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": 3600 }
    
  4. 令牌类型与安全机制

    • 访问令牌:通常为JWT格式,包含用户权限范围和有效期,通过Bearer Token方式在HTTP Header传输:
      Authorization: Bearer ACCESS_TOKEN
      
    • 刷新令牌:长期有效的凭证,用于获取新的访问令牌,避免重复授权
    • 范围控制:通过scope参数限制权限(如scope=read_only)
    • PKCE扩展:针对移动应用的安全增强,通过代码验证码防止授权码拦截攻击
  5. 其他授权模式适用场景

    • 隐式模式:适用于纯前端应用(无后端服务器),直接通过URL片段返回令牌
    • 密码模式:仅受信任客户端使用(如官方应用),直接传递用户名密码
    • 客户端模式:用于机器对机器认证(如API内部调用)
  6. 实际应用案例
    当使用天气预报应用查询天气时:

    • 应用请求获取您的位置权限(scope=location)
    • 您通过系统授权页面确认(授权服务器)
    • 应用获得访问令牌后向位置服务API(资源服务器)请求数据
    • 令牌过期时自动通过刷新令牌获取新令牌,无需重新登录
  7. 安全实践与规范

    • 始终使用HTTPS传输令牌
    • 设置合理的令牌有效期(访问令牌≤1小时,刷新令牌可更长)
    • 采用状态参数防止CSRF攻击
    • 遵循OpenID Connect规范时,可同时获取用户身份信息(ID Token)
OAuth 2.0授权框架 核心问题:第三方应用访问受限资源 当您使用某个应用时,可能会遇到“通过微信/谷歌账号登录”或“请求访问网盘文件”的场景。此时第三方应用需要获得您的授权来访问受保护的资源,但直接提供密码给第三方存在安全风险。OAuth 2.0通过授权层分离资源所有者(用户)、客户端(第三方应用)和资源服务器(如云存储),实现安全委托访问。 核心角色与术语 资源所有者 :拥有受保护资源权限的用户 客户端 :请求访问资源的第三方应用 授权服务器 :验证用户身份并颁发令牌的组件 资源服务器 :存储受保护资源的服务(如API服务器) 授权许可 :代表用户授权资格的凭证(如授权码) 访问令牌 :客户端用于访问资源的数字密钥 授权流程详解(授权码模式) 步骤1:客户端将用户重定向至授权服务器,携带以下参数: 步骤2:用户登录并确认授权后,授权服务器通过302重定向返回授权码至回调地址: 步骤3:客户端在后端用授权码交换访问令牌: 步骤4:授权服务器返回访问令牌和刷新令牌: 令牌类型与安全机制 访问令牌 :通常为JWT格式,包含用户权限范围和有效期,通过Bearer Token方式在HTTP Header传输: 刷新令牌 :长期有效的凭证,用于获取新的访问令牌,避免重复授权 范围控制 :通过scope参数限制权限(如scope=read_ only) PKCE扩展 :针对移动应用的安全增强,通过代码验证码防止授权码拦截攻击 其他授权模式适用场景 隐式模式 :适用于纯前端应用(无后端服务器),直接通过URL片段返回令牌 密码模式 :仅受信任客户端使用(如官方应用),直接传递用户名密码 客户端模式 :用于机器对机器认证(如API内部调用) 实际应用案例 当使用天气预报应用查询天气时: 应用请求获取您的位置权限(scope=location) 您通过系统授权页面确认(授权服务器) 应用获得访问令牌后向位置服务API(资源服务器)请求数据 令牌过期时自动通过刷新令牌获取新令牌,无需重新登录 安全实践与规范 始终使用HTTPS传输令牌 设置合理的令牌有效期(访问令牌≤1小时,刷新令牌可更长) 采用状态参数防止CSRF攻击 遵循OpenID Connect规范时,可同时获取用户身份信息(ID Token)