我一直在阅读很多 REST API 身份验证线程,试图将它们拼凑起来是如何工作的。似乎有 2 个主要阵营,“只使用 HTTP 基本/摘要式身份验证及其关联的 HTTP 标头,每次都发送用户密码”和“针对 URL 进行一次身份验证,获取令牌,存储它,然后将其发送给每个要求。' 每个人都同意不使用会话并使用 HTTPS,这很公平。
我只是希望用户登录后在浏览器上进行身份验证,而不必单独对 API 进行身份验证。大多数情况下,我希望我的网络服务可以免费访问搜索等,并且只需要对某些位置的创建/编辑/删除操作进行身份验证。前端只是用户的浏览器,服务通过 ajax 调用来调用。
我的问题是:
如果您已经在您的站点上使用表单身份验证,那么如何最好地设置 HTTP 身份验证标头?您是否需要在登录表单上添加一些 jQuery 标记(例如这个接受的答案Sending basic authentication information via form),以便您也对 API 进行身份验证并存储,即设置一个基本上只是的 /api/authenticate 部分检查您的 HTTP 身份验证详细信息,以便它们由您的浏览器存储。
如果您取回一个令牌并发送它而不是您的用户/传递每个请求,您将它存储在哪里?每个人都说不要使用cookies,但是浏览器还能在哪里存储类似的东西呢?我可以理解在您有密钥环的智能设备上或在有存储它的地方的应用程序中,但不能在浏览器中
我认为,我见过的其他选项基本上是编写您的 Web 应用程序并代表用户将请求发送到 API(因此您通常使用表单进行身份验证,然后 Web 应用程序执行 API 调用,发送用户凭据本身,可以存储)而不是直接来自用户。这似乎需要做很多额外的工作来解决这个问题,如果一个人决定不完全是 RESTful,那么它可以通过会话巧妙地规避,并且您还必须存储身份验证详细信息。
我最好不要打扰完全休息,因为它并不真正适合这个目的并使用会话?这似乎容易多了。