我正在设计一个通过API密钥使用授权/身份验证的REST API。
我试图找出最合适的位置,然后发现许多人建议使用自定义HTTP标头ProjectName-Api-Key
,例如:
ProjectName-Api-Key: abcde
但在Authorization
标头上使用自定义方案也是可能的,从思想上来说也是正确的,例如:
Authorization: ApiKey abcde
另一方面,我发现一个考虑,自定义授权方案可能出乎意料,并且不受某些客户端支持,并且无论如何都会导致自定义代码,因此最好使用自定义标头,因为客户对此没有任何期望。
您希望以哪种方式发送API密钥?
Bearer
方案专门用于oAuth2。将其与oAuth分开应用听起来是滥用。如果没有oAuth,为什么使用此方案是正确的?顺便说一下,我在为API选择一种授权类型时遇到了麻烦。该API仅可用于一项受信任的服务,因此我调查了oAuth2的客户端凭据流程,在我的案例中,与ApiKey相比没有发现任何好处。
ApiKey
被重命名并解释为Access Token
授予客户端的授权而没有到期时间,则可以将其视为有效的oAuth实现。那是一种哲学方面,如果可以用简单的术语描述我的情况,我决定不带复杂的定义,而是决定将其称为“ ApiKey”。如果您的协议实现了oAuth标准,则可以同意使用Bearer
,但事实并非如此,我猜想该方案无法应用。
Authorization: Bearer <token>
标头,因此从来没有一个问题。令牌是JWT。