在阿里云函数计算(FC)中,HTTP触发器的鉴权认证支持两种方式:域名鉴权和函数触发器鉴权。这两种鉴权方式虽然都支持JWT认证,但它们的应用场景、验证规则和实现逻辑存在一定的差异。以下是对两者的详细对比分析,帮助您选择适合的方案。
1. 域名鉴权
适用场景
- 域名鉴权适用于通过自定义域名访问函数的场景。
- 如果您的应用需要通过自定义域名对外提供服务,并且希望对所有通过该域名的请求进行统一的鉴权管理,则可以选择域名鉴权。
验证规则
- 域名鉴权的配置是在自定义域名层面完成的,而不是针对单个函数触发器。
- 支持的鉴权方式包括:
- 无需认证:允许匿名访问。
- 签名认证:需要对请求进行签名验证。
- JWT认证:通过JWT Token进行身份验证。
- 配置JWT认证时,需要绑定一个Public JWKS,用于验证客户端提供的JWT Token的有效性。
实现逻辑
- 客户端向自定义域名发起请求,请求中携带JWT Token。
- 函数计算网关根据域名配置的JWT认证规则,使用用户提供的公钥验证Token的有效性。
- 验证通过后,请求被转发到目标函数;否则,返回鉴权失败的错误。
特点
- 统一性:域名鉴权适用于所有通过该域名访问的函数,无需为每个函数单独配置鉴权规则。
- 灵活性:可以结合其他域名级别的功能(如HTTPS设置、Web应用防火墙等)一起使用。
2. 函数触发器鉴权
适用场景
- 函数触发器鉴权适用于直接通过HTTP触发器的默认公网访问地址调用函数的场景。
- 如果您的应用需要对单个函数的访问进行独立的鉴权管理,则可以选择函数触发器鉴权。
验证规则
- 函数触发器鉴权的配置是在触发器层面完成的,针对具体的函数触发器。
- 支持的鉴权方式同样包括:
- 无需认证:允许匿名访问。
- 签名认证:需要对请求进行签名验证。
- JWT认证:通过JWT Token进行身份验证。
- 配置JWT认证时,也需要绑定一个Public JWKS,用于验证客户端提供的JWT Token的有效性。
实现逻辑
- 客户端向HTTP触发器的默认公网访问地址发起请求,请求中携带JWT Token。
- 函数计算网关根据触发器配置的JWT认证规则,使用用户提供的公钥验证Token的有效性。
- 验证通过后,请求被转发到目标函数;否则,返回鉴权失败的错误。
特点
- 独立性:每个函数触发器可以独立配置鉴权规则,适合对不同函数设置不同的安全策略。
- 细粒度控制:可以根据具体函数的需求灵活调整鉴权方式。
3. 两套鉴权方式的对比
对比维度 | 域名鉴权 | 函数触发器鉴权 |
配置位置 | 自定义域名层面 | HTTP触发器层面 |
适用范围 | 所有通过该域名访问的函数 | 单个函数触发器 |
灵活性 | 统一管理,适合全局鉴权需求 | 独立配置,适合细粒度鉴权需求 |
实现逻辑 | 使用域名绑定的Public JWKS验证JWT Token | 使用触发器绑定的Public JWKS验证JWT Token |
其他功能集成 | 可结合HTTPS、Web应用防火墙等功能 | 专注于函数级别的鉴权 |
4. 如何选择?
-
选择域名鉴权:
- 如果您的应用通过自定义域名对外提供服务。
- 如果需要对所有通过该域名访问的函数进行统一的鉴权管理。
- 如果希望结合其他域名级别的功能(如HTTPS、CDN加速、Web应用防火墙等)。
-
选择函数触发器鉴权:
- 如果您的应用直接通过HTTP触发器的默认公网访问地址调用函数。
- 如果需要对单个函数的访问进行独立的鉴权管理。
- 如果不同函数的安全策略差异较大,需要细粒度控制。
5. 验证规则和实现逻辑是否一致?
- 验证规则:两者的验证规则基本一致,都需要通过用户提供的Public JWKS来验证JWT Token的有效性。
- 实现逻辑:两者的实现逻辑也类似,都是由函数计算网关负责验证JWT Token,并将验证通过的请求转发给目标函数。
- 主要区别在于配置的位置和适用范围不同,域名鉴权作用于整个域名,而函数触发器鉴权作用于单个触发器。
总结建议
- 如果您的应用场景涉及自定义域名,推荐优先使用域名鉴权,以便统一管理和集成其他功能。
- 如果您的应用场景是直接通过HTTP触发器的默认公网访问地址调用函数,或者需要对不同函数设置不同的鉴权策略,则推荐使用函数触发器鉴权。
希望以上信息能帮助您更好地选择适合的鉴权方案!