我设计了一个简单的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)或访问/会话令牌的方法。
不要犹豫,给我你的反应,并告诉我,如果我不确切或其他什么。
答案 0 :(得分:2)
您需要为REST API使用基于令牌的身份验证。在这种特殊情况下,JWT是最好的。
为什么要使用JSON Web令牌?
令牌无状态。令牌是自包含的,包含验证所需的所有信息。这对于可伸缩性非常有用,因为它使您的服务器不必存储会话状态。
可以从任何地方生成JWT。令牌生成与令牌验证分离,允许您选择在单独的服务器上或甚至通过不同的公司(例如Auth0)处理令牌的签名
JWT具有细粒度的访问控制。在令牌有效内容中,您可以轻松指定用户角色和权限以及用户可以访问的资源。
这将是您典型的身份验证流程:
顺便说一句,如果您不想自己实施身份验证,可以使用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/