-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Added configuration of the user provider #4895
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,8 +22,8 @@ Your exact situation may differ, but in this example, a token is read | |
from an ``apikey`` query parameter, the proper username is loaded from that | ||
value and then a User object is created:: | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyAuthenticator.php | ||
namespace Acme\HelloBundle\Security; | ||
// src/AppBundle/Security/ApiKeyAuthenticator.php | ||
namespace AppBundle\Security; | ||
|
||
use Symfony\Component\Security\Core\Authentication\SimplePreAuthenticatorInterface; | ||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; | ||
|
@@ -142,8 +142,8 @@ used by Symfony's core user provider system). | |
|
||
The ``$userProvider`` might look something like this:: | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyUserProvider.php | ||
namespace Acme\HelloBundle\Security; | ||
// src/AppBundle/Security/ApiKeyUserProvider.php | ||
namespace AppBundle\Security; | ||
|
||
use Symfony\Component\Security\Core\User\UserProviderInterface; | ||
use Symfony\Component\Security\Core\User\User; | ||
|
@@ -187,6 +187,44 @@ The ``$userProvider`` might look something like this:: | |
} | ||
} | ||
|
||
No register your user provider as service. | ||
|
||
.. configuration-block:: | ||
|
||
.. code-block:: yaml | ||
|
||
# app/config/services.yml | ||
services: | ||
api_key_user_provider: | ||
class: AppBundle\Security\ApiKeyUserProvider | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. no need for four spaces |
||
|
||
.. code-block:: xml | ||
|
||
<!-- app/config/services.xml --> | ||
<?xml version="1.0" ?> | ||
<container xmlns="http://symfony.com/schema/dic/services" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://symfony.com/schema/dic/services | ||
http://symfony.com/schema/dic/services/services-1.0.xsd"> | ||
<services> | ||
<!-- ... --> | ||
|
||
<service id="api_key_user_provider" | ||
class="AppBundle\Security\ApiKeyUserProvider" /> | ||
</services> | ||
</container> | ||
|
||
.. code-block:: php | ||
|
||
// app/config/services.php | ||
use Symfony\Component\DependencyInjection\Definition; | ||
|
||
// ... | ||
|
||
$container->setDefinition('api_key_user_provider', new Definition( | ||
'AppBundle\Security\ApiKeyUserProvider', | ||
)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We can use |
||
|
||
.. note:: | ||
|
||
Read the dedicated article to learn | ||
|
@@ -226,8 +264,8 @@ you can use to create an error ``Response``. | |
|
||
.. code-block:: php | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyAuthenticator.php | ||
namespace Acme\HelloBundle\Security; | ||
// src/AppBundle/Security/ApiKeyAuthenticator.php | ||
namespace AppBundle\Security; | ||
|
||
use Symfony\Component\Security\Core\Authentication\SimplePreAuthenticatorInterface; | ||
use Symfony\Component\Security\Core\Exception\AuthenticationException; | ||
|
@@ -265,8 +303,8 @@ your custom user provider as a service called ``your_api_key_user_provider`` | |
# ... | ||
|
||
apikey_authenticator: | ||
class: Acme\HelloBundle\Security\ApiKeyAuthenticator | ||
arguments: ["@your_api_key_user_provider"] | ||
class: AppBundle\Security\ApiKeyAuthenticator | ||
arguments: ["@api_key_user_provider"] | ||
|
||
.. code-block:: xml | ||
|
||
|
@@ -280,9 +318,9 @@ your custom user provider as a service called ``your_api_key_user_provider`` | |
<!-- ... --> | ||
|
||
<service id="apikey_authenticator" | ||
class="Acme\HelloBundle\Security\ApiKeyAuthenticator" | ||
class="AppBundle\Security\ApiKeyAuthenticator" | ||
> | ||
<argument type="service" id="your_api_key_user_provider" /> | ||
<argument type="service" id="api_key_user_provider" /> | ||
</service> | ||
</services> | ||
</container> | ||
|
@@ -296,8 +334,8 @@ your custom user provider as a service called ``your_api_key_user_provider`` | |
// ... | ||
|
||
$container->setDefinition('apikey_authenticator', new Definition( | ||
'Acme\HelloBundle\Security\ApiKeyAuthenticator', | ||
array(new Reference('your_api_key_user_provider')) | ||
'AppBundle\Security\ApiKeyAuthenticator', | ||
array(new Reference('api_key_user_provider')) | ||
)); | ||
|
||
Now, activate it in the ``firewalls`` section of your security configuration | ||
|
@@ -318,6 +356,10 @@ using the ``simple_preauth`` key: | |
simple_preauth: | ||
authenticator: apikey_authenticator | ||
|
||
providers: | ||
api_key_user_provider: | ||
id: api_key_user_provider | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The class behind this service would be the
Thanks :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @weaverryan Updated as per your comments, I think adding the service makes sense. I actually had this before, but then removed it again due to the reference. But that should not be an issue to maintain. I also changed everything to your favorite, the AppBundle.. :) |
||
.. code-block:: xml | ||
|
||
<!-- app/config/security.xml --> | ||
|
@@ -336,6 +378,8 @@ using the ``simple_preauth`` key: | |
> | ||
<simple-preauth authenticator="apikey_authenticator" /> | ||
</firewall> | ||
|
||
<provider name="api_key_user_provider" id="api_key_user_provider" /> | ||
</config> | ||
</srv:container> | ||
|
||
|
@@ -355,6 +399,11 @@ using the ``simple_preauth`` key: | |
), | ||
), | ||
), | ||
'providers' => array( | ||
'simple_preauth' => array( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The change of the name is not reflect here. :) |
||
'id' => 'api_key_user_provider', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need so many spaces? |
||
), | ||
), | ||
)); | ||
|
||
That's it! Now, your ``ApiKeyAuthentication`` should be called at the beginning | ||
|
@@ -394,6 +443,10 @@ configuration or set it to ``false``: | |
simple_preauth: | ||
authenticator: apikey_authenticator | ||
|
||
providers: | ||
api_key_user_provider: | ||
id: api_key_user_provider | ||
|
||
.. code-block:: xml | ||
|
||
<!-- app/config/security.xml --> | ||
|
@@ -412,6 +465,8 @@ configuration or set it to ``false``: | |
> | ||
<simple-preauth authenticator="apikey_authenticator" /> | ||
</firewall> | ||
|
||
<provider name="api_key_user_provider" id="api_key_user_provider" /> | ||
</config> | ||
</srv:container> | ||
|
||
|
@@ -430,14 +485,19 @@ configuration or set it to ``false``: | |
), | ||
), | ||
), | ||
'providers' => array( | ||
'api_key_user_provider' => array( | ||
'id' => 'api_key_user_provider', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same here |
||
), | ||
), | ||
)); | ||
|
||
Even though the token is being stored in the session, the credentials - in this | ||
case the API key (i.e. ``$token->getCredentials()``) - are not stored in the session | ||
for security reasons. To take advantage of the session, update ``ApiKeyAuthenticator`` | ||
to see if the stored token has a valid User object that can be used:: | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyAuthenticator.php | ||
// src/AppBundle/Security/ApiKeyAuthenticator.php | ||
// ... | ||
|
||
class ApiKeyAuthenticator implements SimplePreAuthenticatorInterface | ||
|
@@ -491,7 +551,7 @@ stored in the database, then you may want to re-query for a fresh version | |
of the user to make sure it's not out-of-date. But regardless of your requirements, | ||
``refreshUser()`` should now return the User object:: | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyUserProvider.php | ||
// src/AppBundle/Security/ApiKeyUserProvider.php | ||
|
||
// ... | ||
class ApiKeyUserProvider implements UserProviderInterface | ||
|
@@ -531,7 +591,7 @@ a certain URL (e.g. the redirect URL in OAuth). | |
Fortunately, handling this situation is easy: just check to see what the | ||
current URL is before creating the token in ``createToken()``:: | ||
|
||
// src/Acme/HelloBundle/Security/ApiKeyAuthenticator.php | ||
// src/AppBundle/Security/ApiKeyAuthenticator.php | ||
|
||
// ... | ||
use Symfony\Component\Security\Http\HttpUtils; | ||
|
@@ -543,7 +603,7 @@ current URL is before creating the token in ``createToken()``:: | |
|
||
protected $httpUtils; | ||
|
||
public function __construct(ApiKeyUserProviderInterface $userProvider, HttpUtils $httpUtils) | ||
public function __construct(UserProviderInterface $userProvider, HttpUtils $httpUtils) | ||
{ | ||
$this->userProvider = $userProvider; | ||
$this->httpUtils = $httpUtils; | ||
|
@@ -579,8 +639,8 @@ service: | |
# ... | ||
|
||
apikey_authenticator: | ||
class: Acme\HelloBundle\Security\ApiKeyAuthenticator | ||
arguments: ["@your_api_key_user_provider", "@security.http_utils"] | ||
class: AppBundle\Security\ApiKeyAuthenticator | ||
arguments: ["@api_key_user_provider", "@security.http_utils"] | ||
|
||
.. code-block:: xml | ||
|
||
|
@@ -594,9 +654,9 @@ service: | |
<!-- ... --> | ||
|
||
<service id="apikey_authenticator" | ||
class="Acme\HelloBundle\Security\ApiKeyAuthenticator" | ||
class="AppBundle\Security\ApiKeyAuthenticator" | ||
> | ||
<argument type="service" id="your_api_key_user_provider" /> | ||
<argument type="service" id="api_key_user_provider" /> | ||
<argument type="service" id="security.http_utils" /> | ||
</service> | ||
</services> | ||
|
@@ -613,7 +673,7 @@ service: | |
$container->setDefinition('apikey_authenticator', new Definition( | ||
'Acme\HelloBundle\Security\ApiKeyAuthenticator', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Class name should be changed. |
||
array( | ||
new Reference('your_api_key_user_provider'), | ||
new Reference('api_key_user_provider'), | ||
new Reference('security.http_utils') | ||
) | ||
)); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And we can and the sentence with a colon.