symfony2 安全 - 禁用登录路径并显示禁止

Posted

技术标签:

【中文标题】symfony2 安全 - 禁用登录路径并显示禁止【英文标题】:symfony2 security - disable login path and show forbidden 【发布时间】:2015-09-14 15:08:03 【问题描述】:

当用户尝试访问没有令牌的页面时,我试图阻止重定向到登录页面,我有单页应用程序,我只是将 ajax 请求放在防火墙下,当用户在没有令牌的情况下执行 ajax 时,我想要ajax 返回禁止的异常,所以我将能够在客户端捕获它

当前 ajax 返回“Found”,因为请求被重定向到登录页面

到目前为止,我还没有在食谱中找到解决方案,我不想使用 api 令牌,只发送异常而不是重定向到登录

【问题讨论】:

【参考方案1】:

您需要为您的防火墙定义一个entry_point,以便您返回未经授权的响应。有关入口点的信息可以在文档here 中找到。如果以后有要求,我会在这里复制该段落。

当用户根本没有通过身份验证时(即当令牌存储还没有令牌时),防火墙的入口点将被调用以“启动”身份验证过程。入口点应该实现AuthenticationEntryPointInterface,它只有一个方法:start()。此方法接收当前的 Request 对象和触发异常侦听器的异常。该方法应返回一个 Response 对象。例如,这可能是包含登录表单的页面,或者在基本 HTTP 身份验证的情况下,一个带有 WWW-Authenticate 标头的响应,它将提示用户提供他们的用户名和密码。

所以为了让你这样做,你必须创建一个将被定义为服务的类。

应该是这样的:

namespace MyBundle\Service;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;

class CustomEntryPoint implements AuthenticationEntryPointInterface


    public function start(Request $request, AuthenticationException $authException = null)
    
        $response = new Response("", Response::HTTP_UNAUTHORIZED);

        return $response;
    


在您的services.yml 文件中

services:
    service.entry_point:
        class: MyBundle\Service\CustomEntryPoint

最后将服务 ID service.entry_point 传递给security.yml 文件的firewall 部分中的entry_point 选项。

这应该可以解决问题。

【讨论】:

以上是关于symfony2 安全 - 禁用登录路径并显示禁止的主要内容,如果未能解决你的问题,请参考以下文章

网络安全Windows系统安全实验

服务器添加新用户用ssh-key 登录,并禁用root用户 密码登录

linux 为啥设置禁用root远程登录

找不到 Symfony2 突然登录路径

在登录表单上禁用 CSRF 令牌

Linux-禁止Root用户ssh登录