如何在JS和PHP API之间设置会话令牌?

时间:2016-08-12 08:27:47

标签: javascript php api authentication token

我设计了一个简单的HTML / CSS和JS / jQuery应用程序,现在它是身份验证集成的时刻。在服务器端,我做了一个REST API,允许客户端获取一些数据。但是,现在我想用访问和/或会话令牌验证每个请求。

我阅读了许多网站,以找到在客户端(JS)和REST API(PHP)之间建立安全性的协议或建议,但遗憾的是我没有发现任何内容或者没有发现任何内容。 所以我请你告诉我(如果你愿意)知道该做什么,要实施什么,约定等等。

我读到的内容:

Designing a Secure REST (Web) API without OAuth

Token Based Authentication for Single Page Apps (SPAs)

根据我的声誉,我无法发布更多链接......

请告诉我如何为API存储私人令牌(RSA)或访问/会话令牌的方法。

不要犹豫,给我你的反应,并告诉我,如果我不确切或其他什么。

3 个答案:

答案 0 :(得分:2)

您需要为REST API使用基于令牌的身份验证。在这种特殊情况下,JWT是最好的。

为什么要使用JSON Web令牌?

  1. 令牌无状态。令牌是自包含的,包含验证所需的所有信息。这对于可伸缩性非常有用,因为它使您的服务器不必存储会话状态。

  2. 可以从任何地方生成JWT。令牌生成与令牌验证分离,允许您选择在单独的服务器上或甚至通过不同的公司(例如Auth0)处理令牌的签名

  3. JWT具有细粒度的访问控制。在令牌有效内容中,您可以轻松指定用户角色和权限以及用户可以访问的资源。

  4. 这将是您典型的身份验证流程:

    1. 用户注册/登录,在登录过程中,您从服务器生成JSON Web令牌并将其返回给客户端。由于您使用的是PHP,因此可以使用此library来生成和签署令牌。
    2. 将返回的JWT存储在浏览器Web Storage(本地/会话存储)上。它也可以存储在cookie中。
    3. 对于从客户端到服务器的后续HTTP请求,您通过headers / query发送令牌,然后服务器验证令牌。如果它有效,则对用户进行身份验证,否则拒绝用户。
    4. Typical authentication flow

      顺便说一句,如果您不想自己实施身份验证,可以使用Auth0,查看VanillaJS SPA和PHP quickstart

      我希望这些信息有所帮助。干杯!

答案 1 :(得分:0)

使用JavaScript前端验证REST API很困难,因为访问该站点的任何人都可以完全读取JavaScript代码,因此存储任何类型的登录凭据都是不错的。

使用标准的服务器到服务器设置只需使用HTTPS上的基本身份验证就足够了,但基本身份验证对JavaScript SPA没有好处,因为凭据在普通视图中。

对于SPA,您需要查看JSON WebTokens,因为您的后端是PHP,您需要从firebase查看PHP-JWT。您可以在此处获取代码:https://github.com/firebase/php-jwt或推荐使用composer:

composer require firebase/php-jwt

该包实现了JWT超级简单,请参阅文档以获取完整的代码示例。另请查看JWT以获得完整的细分https://jwt.io/

答案 2 :(得分:0)

我认为Jwt(https://jwt.io/)是你问题的好方法。

在客户端,您可以将令牌存储在localStorage或某个全局变量(用于SPA)。

您可以在HTTP标头或请求参数上传输令牌。它有效。

您还可以看到https://auth0.com/blog/angularjs-authentication-with-cookies-vs-token/