Symfony security return 401 response instead of redirect Symfony security return 401 response instead of redirect symfony symfony

Symfony security return 401 response instead of redirect


What you need is a AuthenticationEntryPoint handler. Simple example:

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;}}

Register class as a service in services.xml file:

<parameters>    <parameter key="authentication_entry_point.class">YourNameSpace\AuthenticationEntryPoint</parameter></parameters><services>    <service id="authentication_entry_point" class="%authentication_entry_point.class%"/></services>

and make a small change in security.yml file:

security:  firewalls:    somename:      entry_point: authentication_entry_point


I was able to override the default entry point for the "form" type under the "api" firewall like this:

$app['security.entry_point.api.form'] = $app->share(function () use ($app) {    return new MyAuthenticationEntryPoint();});

Then it's just a matter of implementing the AuthenticationEntryPointInterface:

http://symfony.com/doc/current/components/security/firewall.html#entry-points

Have a look at the symfony implementation to get an idea:

Symfony\Component\Security\Http\EntryPoint\FormAuthenticationEntryPoint

Also, probably worth checking out the silex security service provider to see how they inject that into "security.entry_point.form._proto" the default implement.

Silex\Provider\SecurityServiceProvider