正如标题所说,我想构建一个在浏览器中运行的应用程序,带有单个 Html 页面。但是如何实现身份验证。我的解决方案是:
- 服务器端是所有的 RESTful API,可以被多个平台、web、移动端等使用。每个需要 auth 的 API 都会得到一个令牌来解析,如果 API 没有得到令牌返回 401。
- 因为我的第一次练习是在浏览器中,所以我需要请求令牌才能登录,当应用程序需要请求 auth-API 时,我会将令牌放在请求头中...
我的问题是:它足够安全吗?还有其他更好的解决方案吗?
不,如果可以通过 javascript 访问令牌,则不够安全,原因与您应该将 cookie 设置为仅 http 并限制为 ssl 相同。如果黑客可以将 javascript 注入您的应用程序,它可以窃取令牌并从他们的机器上使用它。
出于这个原因,我建议您在使用网站时使用安全的、仅限 http 的 cookie 而不是令牌。
如果要从本机移动应用程序访问您的 API,那么您可以为每个 url 添加一个令牌。
在 http 请求中包含自定义标头可能会导致某些代理出现问题,这些代理可能无法通过所有标头。cookie 只不过是一个标准化的 http 标头,因此您不妨重用它。
如果您要允许 3rd 方应用程序访问您的部分 API,您还可以考虑使用 OAuth。
没有理由不能对基于浏览器的客户端使用 cookie,对其他客户端使用 ApiKey 查询参数。