繁体   English   中英

用HTTP基本认证设计Restful API

[英]Design of Restful API with HTTP Basic Authentication

注意:我知道有很多其他StackOverflow问题涉及这个主题。 我已经阅读了很多这些以及许多其他网站。 我还有以下问题。

所以,我正在为新产品构建REST API。 目前,该API完全由我们的网站和手机应用程序私人使用。 但是,我认为设计API可能会很聪明,以便将来可以公开。

认证

虽然我看过OAuth,但我认为基于SSL的HTTP基本身份验证对我们的API来说足够安全。 据我所知,基于SSL的HTTP基本身份验证是一种完全可行的REST API身份验证方法。 它也很简单,因为我是API开发的新手,所以对我很有吸引力。

授权

如果用户使用其用户名和密码登录API,则只能访问API的某些部分。 这意味着他们可以访问自己的内容,但不能访问其他用户的内容。 此外,它们可能仅限于他们都可以做的事情。

除了用户帐户,我还计划拥有其他其他(非用户)帐户以进行更多全局管理任务。 这些帐户可能具有对API的完全访问权限。

这是一个很好的设计吗? 或者,以这种方式验证用户是不是很糟糕? 我应该只通过这种方式验证我的客户(即应用程序)吗?

会议

我最大的问题是,在将用户登录到我们的网络应用程序时,如何管理他们的会话? REST规定每个请求都要发送用户名和密码。 此外,REST API是无状态的,因此我无法在那里管理会话。 但是,我需要跟踪他们以某种方式登录到Web应用程序。 他们显然无法为每个请求手动登录。

一种方法是,在用户登录后,我们将他们的登录凭据(电子邮件和密码)保存到PHP会话。 然后,对API的每个后续请求都可以使用这些凭据。 但是,在PHP会话中保存用户名和密码只是感觉不对而且非常不安全。 但如果不这样做,人们在与REST API交互时如何管理会话?

手机应用程序更容易,因为您可以将用户的登录凭据保存到钥匙串中。

有人可以帮我解决我的设计问题吗?

我知道这个问题有点老了,也许你已经完成了你的工作,但我想给你一些提示。 也许这些可以帮助你或将来的任何人。 :)

认证

HTTP基本身份验证非常简单,这是真的,但并不像你想象的那么安全。 您只需在客户端上安装1个“假”SSL证书,并且在中间攻击中您可以嗅探流量。

如何安装假证书? 浏览器中的用户并不是那么难,只要在看到巨大的红色警告屏幕时点击确定即可。 在移动设备上,例如: http//cryptopath.wordpress.com/2010/01/29/iphone-certificate-flaws/

使用此解决方案,您只需拦截一次流量,您就拥有了用户的密码!

我的提示:在登录时生成临时密码,并在每个其他请求中使用它。 因此,攻击者必须拦截密码的登录过程,如果您将此传递存储在手机本地,例如,则更难。 (当然你可以为它添加过期等...)

授权

我真的不明白你会做什么。 用户访问管理是一件好事,但它取决于给定的项目。

会议

不仅REST API,整个HTTP世界都是无状态的。 如果您使用PHP会话,它会在客户端的cookie中存储会话ID,并且浏览器每次都会将此cookie值发送到服务器。

用户不必每次都登录。 他们登录一次并获得令牌/临时密码等......(或者如果您不使用这些东西),他们会在每次请求时向您发送一个基本的auth标头。 通过这种方式,您可以轻松跟踪向您发送请求的人,因为您现在已经是该用户,并且您可以在服务器上存储和链接某些数据。

有很多方法可以处理用户。 基本身份验证就是其中之一。 并检查一下: OAuth中的OAuth令牌和会话 “OAuth令牌明确是会话标识符,......”

您不必存储用户的密码和电子邮件,只需在每个请求中检查客户端的标题/ cookies / etc ....

手机应用程序更容易,因为您可以将用户的登录凭据保存到钥匙串中。

他们可以,但在手机上保存用户的真实密码是一种非常糟糕的做法。 保存时间有限的令牌会好一点。 :)

在其他所有语言中,您可以根据需要存储值。 例如,如果您想为您的API使用Python客户端:它在变量中验证并存储令牌或其所需的内容,并在每个其他请求中使用此存储的数据。

还有一个旁注:

但是,在PHP会话中保存用户名和密码只是感觉不对而且非常不安全。

确实这是不安全的,但(真正的)PHP会话存储在服务器端,正如我所说它在客户端只存储一个会话ID。 任何能够获得此会话ID的人都可以冒充给定的用户。 (有IP检查等对策......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM