16
16
use Symfony \Component \Security \Core \Authentication \Provider \AuthenticationProviderInterface ;
17
17
use Symfony \Component \Security \Core \Authentication \Token \TokenInterface ;
18
18
use Symfony \Component \Security \Core \Exception \AuthenticationException ;
19
+ use Symfony \Component \Security \Core \Exception \AccountStatusException ;
19
20
use Symfony \Component \Security \Core \User \UserProviderInterface ;
21
+ use Symfony \Component \Security \Core \User \UserCheckerInterface ;
22
+
20
23
use OAuth2 \OAuth2 ;
21
24
use OAuth2 \OAuth2ServerException ;
25
+ use OAuth2 \OAuth2AuthenticateException ;
22
26
23
27
/**
24
28
* OAuthProvider class.
@@ -35,15 +39,20 @@ class OAuthProvider implements AuthenticationProviderInterface
35
39
* @var \OAuth2\OAuth2
36
40
*/
37
41
protected $ serverService ;
42
+ /**
43
+ * @var \Symfony\Component\Security\Core\User\UserChecker
44
+ */
45
+ protected $ userChecker ;
38
46
39
47
/**
40
48
* @param \Symfony\Component\Security\Core\User\UserProviderInterface $userProvider The user provider.
41
49
* @param \OAuth2\OAuth2 $serverService The OAuth2 server service.
42
50
*/
43
- public function __construct (UserProviderInterface $ userProvider , OAuth2 $ serverService )
51
+ public function __construct (UserProviderInterface $ userProvider , OAuth2 $ serverService, UserCheckerInterface $ userChecker )
44
52
{
45
53
$ this ->userProvider = $ userProvider ;
46
54
$ this ->serverService = $ serverService ;
55
+ $ this ->userChecker = $ userChecker ;
47
56
}
48
57
49
58
/**
@@ -75,6 +84,18 @@ public function authenticate(TokenInterface $token)
75
84
$ token ->setToken ($ tokenString );
76
85
77
86
if (null !== $ user ) {
87
+
88
+ try {
89
+ $ this ->userChecker ->checkPostAuth ($ user );
90
+ } catch (AccountStatusException $ e ) {
91
+ throw new OAuth2AuthenticateException (OAuth2::HTTP_UNAUTHORIZED ,
92
+ OAuth2::TOKEN_TYPE_BEARER ,
93
+ $ this ->serverService ->getVariable (OAuth2::CONFIG_WWW_REALM ),
94
+ 'access_denied ' ,
95
+ $ e ->getMessage ()
96
+ );
97
+ }
98
+
78
99
$ token ->setUser ($ user );
79
100
}
80
101
0 commit comments