【问题标题】:Angular & Symfony: Why should we use token system for authentication?Angular & Symfony:为什么要使用令牌系统进行身份验证?
【发布时间】:2018-09-15 03:50:33
【问题描述】:

我正在开发一个项目,它使用 Angular 作为前端,Symfony 作为后端,目前我正在使用 Token 系统进行身份验证,据我们所知,步骤如下:

  • 向后端提供用户名和密码
  • 生成令牌
  • 使用localStorage在客户端保存它
  • 每次向后端发送请求时,检查令牌是否已过期并再次刷新

为了实现这一点,我必须安装三个捆绑包:
- LexikJWTAuthenticationBundle:用于创建令牌系统
- JWTRefreshTokenBundle: 用于刷新令牌系统
- NelmioCorsBundle:处理 CORS 请求

所以我的问题是,当我们可以使用 Symfony 的默认身份验证系统时,为什么还要使用这些东西?!
如果我错了,请纠正我
我们可以简单地使用这些步骤而不安装任何额外的包:

  • 向后端提供用户名和密码
  • 使用 symfony 的默认身份验证系统(的 当然是在配置防火墙之后)
  • 每次我们发送一个请求(在控制器中)我们可以检查是否 用户使用此方法登录$this->getUser();(这将 如果他没有连接,则返回null)

对于 CORS 请求,我们可以简单地创建一个带有标题 array('Access-Control-Allow-Origin'=> '*') 的自定义响应,让我们这样说:

class APIResponse extends Response
{
    function __construct($content, $status = 201, array $headers = array('Access-Control-Allow-Origin' => '*', 'Content-Type' => 'application/json'))
    {
        if(is_array($content)) parent::__construct(json_encode($content), $status, $headers);
        else throw new LogicException('The response must be an array, '.gettype($content).' given');
    }
}

这只是一个想法,我希望你们指出正确的方向并解释为什么我们应该使用令牌而不是 symfony 的默认身份验证系统。

【问题讨论】:

  • 令牌允许您跳过在服务器上存储会话数据。无状态的解决方案。但只要这不是问题,那么 Symfony 安全系统就可以了。请考虑使用 isGranted 功能而不是 getUser。请注意,虽然自然倾向于寻找捆绑软件来实现这类东西,但捆绑软件通常可能是矫枉过正的。一些特定于您需要的代码通常就是您真正需要的。
  • @Cerad 正是我不喜欢为一个小应用程序安装很多包,谢谢你的回答:)

标签: angular symfony jwt access-token restful-authentication


【解决方案1】:

你不能告诉你必须使用特定的解决方案。你可以选择任何你想要的。

JWT 最近真的很流行。很高兴知道 JWT 是如何工作的。但你不必使用 JWT 风格的授权。

JWT 对于拥有数千名注册用户的大型系统非常强大,因为它可以减少数据库使用量(减少查询次数)。这是因为令牌处理从服务器端转移到客户端。

对于较小的系统,我更喜欢使用 api-keys、会话令牌等。就像你写的那样,那里的 JWT 工作量太大。

【讨论】:

  • 是的,使用 JWT 的工作量太大了,所以你的意思是我可以使用我的想法(默认身份验证)而不是 JWT?
猜你喜欢
  • 2023-03-20
  • 2016-05-30
  • 2013-05-10
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多