注意:我知道有很多其他 StackOverflow 问题涉及这个主题。我已经阅读了其中的许多,以及许多其他网站。我还有以下问题。
所以,我正在为一个新产品构建一个 REST API。目前,API 完全供我们的网站和手机应用程序私人使用。但是,我认为设计 API 以便将来可以公开它可能是明智的。
验证
虽然我看过 OAuth,但我认为基于 SSL 的 HTTP 基本身份验证对于我们的 API 来说已经足够安全了。据我了解,基于 SSL 的 HTTP 基本身份验证是一种完全可行的 REST API 身份验证方式。它也很简单,这对我很有吸引力,因为我是 API 开发的新手。
授权
如果用户使用他们的用户名和密码登录 API,他们将只能访问 API 的某些部分。这意味着他们可以访问自己的内容,但不能访问其他用户的内容。此外,他们可能仅限于他们都可以做的事情。
除了用户帐户之外,我还计划拥有其他(非用户)帐户来执行更多全局管理任务。这些帐户可能具有对 API 的完全访问权限。
这是一个好的设计吗?或者,以这种方式对用户进行身份验证是否不好?我应该只以这种方式验证我的客户(即应用程序)吗?
会话
我最大的问题是,当用户登录到我们的网络应用程序时,我如何管理他们的会话?REST 规定在每个请求中发送用户名和密码。此外,REST API 是无状态的,所以我无法在那里管理会话。但是,我需要跟踪他们是否以某种方式登录了网络应用程序。他们显然不可能为每个请求手动登录。
一种方法是,在用户登录后,我们将他们的登录凭据(电子邮件和密码)保存到 PHP 会话中。然后,对 API 的每个后续请求都可以使用这些凭据。然而,在 PHP 会话中保存用户名和密码感觉是错误的并且非常不安全。但如果不这样做,人们在与 REST API 交互时如何管理会话?
电话应用程序更容易,因为您可以将用户的登录凭据保存到钥匙串中。
任何人都可以帮助解决我的设计问题吗?