如何为公共RESTful API设计非必需的身份验证

时间:2013-05-28 18:53:18

标签: api rest session authentication

我有两台Node服务器。一个服务于网站,一个服务于RESTful API,为网站背后的数据提供支持。

当用户登录网站时,会创建会话。然后,这允许我向用户提供正确的HTML,具体取决于他们是否已登录。

我的API还需要为某些端点识别和授权用户。但是,由于API在不同的服务器上提供(从创建登录会话的服务器),我无法重用该会话数据。此外,我希望RESTful API是公共的,并且以这种方式重用会话数据可能会阻止这种情况。公开我的意思是从长远来看,我希望允许外部开发人员与他们的API请求进行交互并对其进行授权。某些端点需要获得授权(例如PUT资源上的User),而有些端点应该免费供所有人查看(公开;例如GETUser资源)。

这是我的第一个RESTful API,我以前从未处理过这种方式的身份验证。考虑到这些细节,我应该如何设计我的身份验证层?

我对会话令牌和OAuth有一个非常简短的了解,但是如果你有一个涉及其中任何一个的解决方案,我将非常感谢这些事情如何结合起来创建身份验证层的详细解释。任何资源链接,以帮助我学习各种技术也将不胜感激!

2 个答案:

答案 0 :(得分:0)

我将调用您的网络服务器A和您的数据服务B.一个简单的方案是使用私钥在B上注册A.然后,从A到B(通过https)的请求可以包含具有私钥的Authentication头(http://en.wikipedia.org/wiki/HTTP_header),这解锁了API的“私有”功能。如果在没有或使用false私钥的情况下调用,这些函数将返回HTTP 403 Forbidden或其他内容(http://en.wikipedia.org/wiki/HTTP_403)。

答案 1 :(得分:0)

您可能希望将两者之间的身份验证方法保持不变。对API的大多数调用都不会通过浏览器,并且代码中的HTTP客户端中的管理会话是一个巨大的痛苦。对于通过浏览器的Web应用程序,基于会话的方法是正确的。

对于API,有两种常用的方法可以添加身份验证:HTTP基本身份验证通过SSL和OAuth 2. I wrote a longer article about how to pick one。虽然对于您的情况,听起来像是简单的HTTP基本身份验证(确保使用SSL)有选择地为特定端点启用可能是要走的路。您可以让您的用户使用他们的正常凭据登录(浏览器将对其进行一些缓存并在第一次成功验证后自动发送,而不使用cookie)但我建议为其生成单独的密钥/令牌对网站的每个消费者。许多不使用OAuth的流行公共API采用这种方法(例如Twilio)。

相关问题