通过 token/api 密钥保护 API

Posted

技术标签:

【中文标题】通过 token/api 密钥保护 API【英文标题】:Protect the API by token/api key 【发布时间】:2020-10-31 04:07:47 【问题描述】:

一个关于 API 安全的新手问题:

当我从一些 API 提供商处申请 API 服务时,通常我只是登录并在他们的 api 管理站点中生成一个 api 密钥或令牌。之后,我可以将此 API 密钥或令牌嵌入到访问 API 的请求中。

有人告诉我这是 OAuth 2。但是,在阅读了几篇有关 OAuth 2 的文章后,似乎从 OAuth 服务器发出的 OAuth-2 令牌将过期,并且需要刷新令牌才能获取新令牌。

但是我从这些 API 提供商那里获得的 API 密钥没有提到过期,相反,我可以在他们的 API 管理站点上手动撤销 API 密钥。

那么,如果我有一些 API 想要使用类似的方式(让用户在我的网站上管理他们自己的 api 密钥)来保护,我该如何通过使用 OAuth 2 服务器来实现呢?

【问题讨论】:

【参考方案1】:

我认为您在上面解释的是授权请求的两种不同方式:

A.使用 API 密钥

这些 API 密钥通常是您在仪表板中生成的长字符串 作为开发人员,您通常会在整个应用中拥有 1 个 API 密钥,并且您将此 API 密钥附加到对 API 提供者的请求中

B.使用 OAuth 2.0

OAuth 2.0 使用不同类型的令牌来授权请求​​,它通常涉及短期访问令牌和长期刷新令牌。 这些令牌通常用于用户,每个用户都有一个不同的令牌,每 X 天过期一次。 要获取令牌,用户必须“登录”到您的网站或身份提供商的网站(如 Google 帐户),并在每次令牌过期时输入他们的凭据。

这里有一张图片来显示差异:

如果您想为其他开发者提供 API 服务:

使用 OAuth 2.0 将开发人员登录到他们的仪表板(这意味着您与仪表板交互的服务器路由将受到 OAuth 2.0 令牌的保护,要求开发人员登录以更新一些设置) 使用 API 密钥访问您提供的 API 路由。开发人员必须从仪表板登录并生成 API 密钥。然后他们可以使用此 API 密钥从您的 API 中获取资源。

这里有一个关于OAuth 2.0, access tokens, and how to implement it on your site的更详尽的解释。

【讨论】:

Reference 抛出 404。另外,您能否指出一些资源,让我了解 API 密钥的工作原理?我一直在考虑做类似的事情-> 生成密钥,将其存储在数据库中,并在每次请求时检查数据库是否相同。但这似乎不是为每个请求查询数据库的正确方法。

以上是关于通过 token/api 密钥保护 API的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 API 密钥? [复制]

如何保护 Android 应用程序中的 Azure 翻译 API 密钥

如何使用 API 密钥和秘密保护 Spring Boot API

保护用于进行 Web Api 调用的 API 密钥

有没有办法保护前端页面上的 API 密钥?

使用 React 前端处理受密钥保护的 API 操作的正确方法是啥?