如何在 Symfony3 上通过令牌共享的页面实现安全性

How to implement security on a page shared by token on Symfony3

需要:

我需要为我的 Symfony3 应用程序的 IS_AUTHENTICATED_ANONYMOUSLY 用户共享一个 "client" 页面。

实施此类功能的最佳做法是什么?


我的想法:

  1. security.yaml

    中的特定访问控制

    access_control:

    - { path: {regex with token?}, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    
  2. 用于存储令牌的令牌实体

  3. findOnBy 使用传入的令牌 url

    if(null === $token){
        throw new NotFoundHttpException('Page not found');
    }
    

问题:

  1. 正则表达式不起作用什么是对应的正则表达式 case/{token} ?
  2. 感觉这个方法可以,但是不是很有效 在安全要求方面。我的想法是否足以管理 此功能的安全性?什么是更好的做法?

将身份验证移到您的控制器之外,如果令牌无效,return 一个适当的 "not authorized" 异常。

基本上您需要创建 AuthenticatorInterface 的实现,这通常通过扩展 AbstractGuardAuthenticator 来完成,如 here 所述。

在您的 supports() 方法中,您可能会检查该令牌是否存在,并且该路由可能是您真正想要的路由 protect/authenticate。