我有两台Node服务器。一个服务于网站,一个服务于RESTful API,为网站背后的数据提供支持。
当用户登录网站时,会创建会话。然后,这允许我向用户提供正确的HTML,具体取决于他们是否已登录。
我的API还需要为某些端点识别和授权用户。但是,由于API在不同的服务器上提供(从创建登录会话的服务器),我无法重用该会话数据。此外,我希望RESTful API是公共的,并且以这种方式重用会话数据可能会阻止这种情况。公开我的意思是从长远来看,我希望允许外部开发人员与他们的API请求进行交互并对其进行授权。某些端点需要获得授权(例如PUT
资源上的User
),而有些端点应该免费供所有人查看(公开;例如GET
上User
资源)。
这是我的第一个RESTful API,我以前从未处理过这种方式的身份验证。考虑到这些细节,我应该如何设计我的身份验证层?
我对会话令牌和OAuth有一个非常简短的了解,但是如果你有一个涉及其中任何一个的解决方案,我将非常感谢这些事情如何结合起来创建身份验证层的详细解释。任何资源链接,以帮助我学习各种技术也将不胜感激!
答案 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)。