目标:我的服务器需要将非用户定向到登陆/主页,并将用户登录到实际应用。加载应用程序后,它将对RESTful API(通过Ajax)进行身份验证的 HTTP请求。
我有一个需要身份验证的RESTful API。在另一台服务器上,我有我的网站,也需要身份验证,因此我可以确定是为非用户显示登陆/主页还是为登录用户显示应用程序。
最初我认为为RESTful API实现HTTP Basic Auth就足够了。但是,为了让我的网站运行身份验证,我还需要在那里设置身份验证,这意味着复制低级代码以检查REST API和网站服务器中数据库中的凭据。
或者,我想知道该网站是否可以通过RESTful API进行身份验证。例如,在POST /login
的请求处理程序中,我可以向我的API发出GET
请求,并从请求正文传递用户凭据。如果请求返回200 OK
,我可以签署用户的会话,从而验证它们。从那时起,对REST API的Ajax请求需要使用相同的凭据进行身份验证,因此我可以:
Authorization
标头中吗?或者,我想我可以在两台服务器之间共享一个会话,虽然我听说这是RESTful设计的不良做法。
这样做会有什么问题?有没有更好的方法来实现我的目标?
答案 0 :(得分:3)
我最近实现了类似的东西(假设我理解正确),似乎有一些可行的选择。
您应该实施的具体取决于您的情况。我个人肯定会选择更安全的选项(最后一个选项),但是由于外部限制,我们被迫在我们的特定情况下实现第一个选项(承诺我们会重新访问并稍后升级 - 不幸的是后来永远不会来)。
答案 1 :(得分:0)
我认为您在REST服务中使用基本HTTP身份验证并让您的应用通过该服务进行身份验证的方法非常好。这里唯一的警告(我相信你知道),你的REST服务应该通过SSL运行,因为基本的HTTP身份验证不是很安全 - 用户名和密码只是Base64编码。