首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >认证RESTful API

认证RESTful API
EN

Stack Overflow用户
提问于 2014-05-15 18:18:43
回答 1查看 418关注 0票数 2

我相信你在堆栈溢出上见过很多类似的问题,而我也曾浏览过很多问题,但都没有找到我想要的具体答案。

因此,我的问题是:我正在开发一个面向私有的API,它将由我的移动应用程序使用,而且我很难选择特定的身份验证选项及其实现。

我读过许多文章,告诉我使用HMAC-SHA1摘要身份验证的优点,以及一些赞扬REST基于oAuth的身份验证的优点,坦率地说,这让我更加困惑,因为这是我第一次开发RESTful API。

我需要问的是,如何选择使用哪种身份验证方法以及为什么?我知道使用HMAC或摘要身份验证会在服务器上产生额外的开销,因为请求将分两个阶段处理:

  1. 客户端向服务器请求资源,
  2. 服务器用401状态代码和一堆头参数(如nonce、王国和诸如此类)进行回复,
  3. 客户端重新发送相同的请求,但现在通过创建请求主体的散列并对先前发送的参数进行进一步处理。

现在还有更多的问题:

  1. 为什么这么复杂?这样会不会使服务器的效率降低一半,增加服务器上的带宽开销?
  2. 如何在服务器和应用程序之间共享一个秘密,而不需要将密钥或散列存储在应用程序中的某个地方(可能是文件或数据库)。这样做不会让任何用户对资源文件甚至SQLlite数据库、表及其内部数据有根的电话访问权吗?

正如你可能已经收集到的,我现在很困惑,如果你能在这件事上给我一个正确的方向,我会很感激。谢谢。

编辑:我将使用SSL/HTTPS在服务器和客户端之间进行通信。

EN

回答 1

Stack Overflow用户

发布于 2014-05-23 07:55:13

安全的web服务必须提供以下4种服务:

  • 身份验证:安全协议应允许服务器验证客户端是否已在一定时间内进行身份验证。此外,任何客户端都不应该能够伪造有效的请求/令牌。
  • 机密性:安全请求的内容仅供服务器读取。
  • 完整性:安全协议应允许服务器检测请求/令牌是否已被修改。
  • 反重播:在攻击者重放被盗令牌的情况下,安全协议应该能够检测令牌/请求无效。

要授予这四个服务,必须使用SSL/TLS。这将授予客户端它正在交谈的服务器是好的,并将提供机密性。

若要对客户端进行身份验证,服务器需要保存有效客户端或用户的列表。老实说,您使用的身份验证方式将取决于您的需求:

  • HTTP Basic:在TLS下是一个有效的选项,它非常快。更适合需要性能的系统。
  • HTTP :说实话,它与基本HTTP差不多是安全的,因为它容易受到MiM攻击,因此只有在TLS的情况下才有效。速度更慢。
  • 您自己的令牌(如亚马逊)或其他令牌实现(OAuth.):为什么不呢,它更复杂,您需要在客户机上安装一个秘密密钥(困难的部署),但可能是最安全的选项.

在我看来,无论如何,您将不得不使用TLS,并且客户端中的密钥管理可能会很痛苦,而且通常是脆弱的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23685840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档