编程语言
首页 > 编程语言> > php – Symfony安全性返回401响应而不是重定向

php – Symfony安全性返回401响应而不是重定向

作者:互联网

我正在编写一个带有ajax身份验证的ajax应用程序,现在我开始在silex中使用symfony安全组件来处理身份验证/授权.
使用简单配置进行简单测试,我通过防火墙进入受保护区域,我得到的响应是重定向到/ login页面,但我在应用程序中需要的是401响应,可能有其他信息(在标题或关于如何登录的json body.

$app['security.firewalls'] = [
    'api' => [
        'pattern' => '^/api',
        'logout' => ['logout_path'=>'/auth/logout'],
        'users' => $app->share(function(Application $app) {
            return new MyUserProvider();
        })
    ]
];

编辑:我有一个提示,但我不知道如何使用它.使用AuthenticationEntryPointInterface实现入口点我可以告诉api如何回答未经身份验证的请求并向用户提供身份验证所需的指令.这可能是我的401响应登录说明.

解决方法:

您需要的是AuthenticationEntryPoint处理程序.
简单的例子:

class AuthenticationEntryPoint implements AuthenticationEntryPointInterface {

/**
 * Starts the authentication scheme.
 *
 * @param Request $request The request that resulted in an AuthenticationException
 * @param AuthenticationException $authException The exception that started the authentication process
 *
 * @return Response
 */
public function start(Request $request, AuthenticationException $authException = null)
{
    $array = array('success' => false);
    $response = new Response(json_encode($array), 401);
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}
}

将类注册为services.xml文件中的服务:

<parameters>
    <parameter key="authentication_entry_point.class">YourNameSpace\AuthenticationEntryPoint</parameter>
</parameters>

<services>
    <service id="authentication_entry_point" class="%authentication_entry_point.class%"/>
</services>

并在security.yml文件中进行一些小改动:

security:
  firewalls:
    somename:
      entry_point: authentication_entry_point

标签:silex,php,authentication,symfony,security
来源: https://codeday.me/bug/20191004/1852090.html