我正在尝试编写一个无状态的、基于 REST 的 API,我计划从几个不同的地方使用它,其中一个将是一个单页 Javascript webapp。这个想法基本上是拥有一个可用于各种不同客户端的 API——包括那些可能由其他人编写但仍可能需要访问用户数据的 API——而不是为不同的客户端使用不同的 API。
我目前遇到的问题是身份验证。理想情况下,我想在这里使用一些标准而不是自己滚动,但我正在努力寻找真正适合的标准。我还试图避免根据谁进行呼叫而使用不同的身份验证机制的解决方案。在这个阶段,我实际上只需要对实际使用应用程序的用户进行身份验证——通过用户名和密码或类似方式——但如果/当不是网页的客户端想要使用它时,他们应该可能也会被认证。
从我所看到的情况来看,似乎最好的方法实际上是通过 HTTPS 连接使用 HTTP Basic 身份验证。我不禁认为这是缺少一些东西。显而易见的替代方案似乎是 OAuth 1.0 - 它要求潜在不安全的 Javascript 会话知道客户端密钥 - 或 OAuth 2.0 - 这似乎回到使用 SSL 上的用户名/密码来生成访问令牌,然后使用该访问在 SSL 上再次请求未来请求上的令牌,这与 HTTP Basic 基本相同,但有点混淆。
请注意,我没有在这里计算 HTTP Digest,仅仅是因为 - 据我了解 - 传递给服务器的内容是包含不可检索形式(即散列)的密码,并且如果我将密码存储在后端以不可检索的形式,那么我无法比较两者......