
如何获取豆包 API Key 密钥(分步指南)
保护数字服务的安全涉及多个方面,从用户身份验证到软件供应链防护、防止恶意代码注入等。其中,API 的授权控制是关键环节。根据 OWASP API 安全十大漏洞,授权破坏不仅排名第一,还以多种形式出现(如 BOLA、BOPLA 和 BFLA)。因此,强化 API 授权控制对于保障系统安全至关重要。
开发人员通常通过 API 密钥 或 OAuth 访问令牌来保护 API 的访问。然而,即使采用成熟技术方案,仍可能存在过于技术化、缺乏业务灵活性的风险。本文将探讨如何通过 基于属性的授权(ABAC) 提供以业务为中心、可扩展的解决方案。
访问控制(Authorization)是确保请求者能够访问资源的关键机制。在系统中实现访问控制有多种模型,其中最流行的是 基于角色的访问控制(RBAC) 和 基于属性的访问控制(ABAC)。
RBAC 通过用户分配的角色来授权请求。开发人员需先为用户分配角色(如客户、VIP 客户、管理员、供应商或匿名用户),然后将这些角色与 API 端点的访问权限关联。
RBAC 在简单系统中非常高效,因此广受欢迎。然而,在复杂系统中,RBAC 的局限性明显:它无法实现细粒度权限控制,仅能基于用户角色制定授权策略。
ABAC 通过使用所有可用属性(通常是关于用户的属性)来决定是否授权访问。例如,ABAC 系统不仅可以根据用户角色,还可以根据用户所属部门、地理位置、访问时间等条件做出授权决策。
ABAC 所使用的属性不局限于用户,还可以包括资源属性、环境属性或上下文信息。
关键在于,API 必须从可信来源获取属性,并确保其未被篡改。这使得 OAuth 访问令牌及其声明成为 ABAC 的理想属性来源。
OAuth 授权服务器 会在访问令牌中包含声明信息,并通过签名保护属性完整性。API 应尽可能依赖令牌中的声明信息,但在某些复杂授权场景中,这些信息可能不足。
此时,API 可以通过补充其他属性完成授权决策,但这些属性必须来自安全来源(如内部数据库),而非请求头、查询字符串或请求正文,因为这些内容容易被篡改。
ABAC 的优势在于不局限于用户属性,可以利用多种属性制定授权策略。
某些 API 端点可能只允许内部应用程序访问。通过验证令牌中的 client_id
声明,可以确保仅授权内部客户端发起的请求。
授权策略不应仅基于 API 凭据所标识的用户。例如,用户可能授权某应用访问特定资源,而令牌中明确列出允许访问的资源。
API 在处理请求时,必须确保仅访问指定资源,即使用户本身拥有更高权限。这种细粒度授权可通过令牌声明或安全数据库查询实现。
在大规模系统中,访问控制管理可能变得复杂。结合 OAuth 与 ABAC,可以实现高效授权管理:
这种组合能有效应对复杂授权需求,同时提升系统安全性和灵活性。
正如 OWASP API 安全十大漏洞 所示,正确的授权控制是 API 安全核心。
授权策略不应仅限于用户属性,而应综合考虑所有可用属性,为系统提供全方位保护。
原文链接: https://curity.io/blog/strengthen-api-access-control-with-attribute-based-authorization/