前域 (Front Channel)指的是通过用户的浏览器(即前端)进行通信的、不完全可信的通道。
后域 (Back Channel)指的是服务器与服务器之间直接进行的、可信的、安全的通信通道。
这两个概念的核心区别在于通信的路径和安全性,下面进行详细解释。
1. 前域 (Front Channel)
通信路径用户浏览器
←→客户端应用(前端)
←→认证服务器
特点
公开可见通信请求和响应会经过用户的浏览器,因此参数(如 code、state)在URL中是可见的。
安全性较低因为它暴露给终端用户和浏览器环境,可能受到跨站脚本(XSS)或跨站请求伪造(CSRF)等攻击。
使用重定向通信通常通过HTTP 302重定向来完成,用户被从一个地址重定向到另一个地址。
典型场景
授权码流程中的授权请求用户被重定向到认证服务器的登录页面。
网址可能是https://auth-server.com/authorize?client_id=abc123&redirect_uri=https://my-app.com/callback&...
返回授权码用户登录成功后,认证服务器将用户重定向回客户端应用指定的回调地址(redirect_uri
),并在URL中携带授权码(Code)。
网址可能是https://my-app.com/callback?code=xxxxxxxx&state=yyyyyyyy
为什么叫“前”域?
因为它是“前台”的、面向用户的交互流程,就像商店的“前台”,顾客(用户浏览器)可以在这里进行交互。
通信路径客户端应用(服务器端)
←→认证服务器
特点
机密且直接通信发生在两个服务器之间,不经过用户的浏览器,用户看不到也干预不了这个过程。
安全性高可以使用客户端密码(Client Secret)等敏感信息进行身份验证,这些信息绝不会暴露给前端。
使用直接API调用通信通过后端的HTTPS API请求完成。
典型场景
用授权码换取访问令牌客户端应用的后端服务器收到前端传来的授权码(Code)后,用它直接向认证服务器的令牌端点(Token Endpoint)发起请求,换取访问令牌(Access Token)和刷新令牌(Refresh Token)。
* 请求是一个直接的POST
请求到https://auth-server.com/oauth/token
,并在请求体或头中包含client_id
,client_secret
,code
等信息。
为什么叫“后”域?
因为它是“后台”的、服务器对服务器的“幕后”工作,就像商店的“后台仓库”,只有内部员工(服务器)凭凭证才能进入,顾客无法访问。
特性 | 前域 (Front Channel) | 后域 (Back Channel) |
通信参与者 | 用户浏览器、客户端前端、认证服务器 | 客户端后端服务器、认证服务器 |
通信路径 | 经过用户浏览器 | 不经过用户浏览器,直接服务器间通信 |
安全性 | 较低,信息在URL中可见 | 非常高,使用客户端密钥等敏感信息 |
通信方式 | HTTP 重定向 (302) | 直接的 HTTPS API 调用 (POST) |
携带信息 | 授权码 (Code)、状态令牌 (State) | 访问令牌 (Access Token)、刷新令牌 (Refresh Token)、客户端密钥 (Client Secret) |
可信度 | 不可信,可能被用户或恶意脚本篡改 | 可信,双方是已知的服务器 |
一个完整的OAuth流程例子(授权码模式)
假设用户点击了“用Google登录”:
1、前域请求(启动登录):
* 前端将用户重定向到Google认证服务器。
https://accounts.google.com/oauth/authorize?client_id=你的ID&redirect_uri=https://你的应用.com/callback&...
2、前域响应(返回授权码):
* 用户在Google登录并授权后,Google通过浏览器将用户重定向回你指定的redirect_uri
。
https://你的应用.com/callback?code=AUTH_CODE_HERE&state=STATE_TOKEN
3、后域请求(换取令牌):
* 你的应用后端收到前端发送来的code
。
你的后端直接向Google的令牌端点发起一个POST 请求
POST https://oauth2.googleapis.com/token
请求体中包含code=AUTH_CODE_HERE&client_id=你的ID&client_secret=你的密钥&...
4、后域响应(获得令牌):
* Google验证请求后,直接向你的后端返回一个JSON数据,里面包含了珍贵的access_token
和refresh_token
。
理解前域和后域的关键在于区分哪些操作需要/会经过用户的浏览器,哪些操作是服务器在背后悄悄完成的,这种设计是OAuth 2.0安全性的基石,它确保了最敏感的凭证(如客户端密钥和令牌)永远不会暴露给不可信的前端环境。
文章摘自:https://idc.huochengrm.cn/js/14855.html
评论