只需在 HTTP 标头中发送一个密钥即可对 REST 调用进行身份验证?

Posted

技术标签:

【中文标题】只需在 HTTP 标头中发送一个密钥即可对 REST 调用进行身份验证?【英文标题】:Simply send a key in HTTP header to authenticate for a REST call? 【发布时间】:2017-07-03 00:38:39 【问题描述】:

我的网站上有一些 REST 服务可供第三方访问。 我的计划很简单。为了调用这些服务,他们需要向我请求密钥。我会私下为他们提供一个 GUID。对我的任何服务的每次调用都将通过过滤器检查密钥的标头并相应地接受/拒绝请求。 该站点全部采用 HTTPS,因此密钥在传输过程中会被加密。我不担心授权客户可以在视觉上识别密钥。换句话说,我不担心任何类型的“内部”攻击或共享密钥的人。我只是不想要随机的、未经授权的外部用户。

我环顾四周,并没有真正看到有人这样做。我觉得我过于简单化了……但另一方面,我也看不出它有什么问题。

我的问题是......这听起来足够安全(从基本/最小的角度来看)还是暴露了一些我没有看到的巨大安全漏洞?

FWIW - 我正在使用 Spring Framework,包括 Spring Security 4。

谢谢!

【问题讨论】:

听起来像是基本的 API 密钥实现等。我会检查 this out first。 是的。对不起,我在原始消息中不清楚。我已经有这个了。它是实时的并且运行良好。我的问题更多是关于..它听起来足够安全(从基本/最小的角度来看)还是暴露了一些我没有看到的巨大的安全漏洞?我会更新原帖。 酷,这确实是一种非常常见的模式,有时最小的方法是最好的。我已经提交了一个可以使用的其他方法的答案。 【参考方案1】:

如果它是 HTTPS 并且 API 密钥在传输过程中加密的标头中,如您所描述的等,那么它遵循一个非常标准的设计身份验证模式。

您的安全性现在取决于您如何分发和存储 API 密钥。

不过,您可以使用“Application Identifier and Key pairs”方法。

而 API 密钥模式结合了应用程序的身份 和一个令牌中的秘密使用令牌,这种模式将 二。每个使用 API 的应用程序都会发出一个不可变的初始值 标识符称为应用程序 ID (App ID)。应用 ID 是 恒定的,可能是秘密的,也可能不是秘密的。此外,每个应用程序 可能有 1-n 个应用程序密钥 (App_Keys)。每个 Key 都关联 直接与 App_ID 并应视为秘密。

以防万一您希望将来扩展应用程序。

【讨论】:

以上是关于只需在 HTTP 标头中发送一个密钥即可对 REST 调用进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

在标头php curl中发送身份验证

在现有 WCF SOAP 服务中添加 Http 标头不起作用

为啥浏览器中未设置 res 标头中的 cookie?

C#发送手机短信

HTTP 标头或 SOAP 标头中的 WCF 肥皂操作?

根据 ASP.NET Core 请求标头中提供的 API 密钥授权用户