1313use Laravel \Passport \ClientRepository ;
1414use Laravel \Passport \Contracts \AuthorizationViewResponse ;
1515use Laravel \Passport \Exceptions \AuthenticationException ;
16+ use Laravel \Passport \Exceptions \OAuthServerException ;
1617use Laravel \Passport \Passport ;
1718use League \OAuth2 \Server \AuthorizationServer ;
1819use League \OAuth2 \Server \Entities \ScopeEntityInterface ;
19- use League \OAuth2 \Server \Exception \OAuthServerException ;
2020use League \OAuth2 \Server \RequestTypes \AuthorizationRequestInterface ;
2121use Nyholm \Psr7 \Response as Psr7Response ;
2222use Psr \Http \Message \ServerRequestInterface ;
@@ -41,14 +41,15 @@ public function __construct(
4141 */
4242 public function authorize (ServerRequestInterface $ psrRequest , Request $ request ): Response |AuthorizationViewResponse
4343 {
44- $ authRequest = $ this ->withErrorHandling (fn () => $ this ->server ->validateAuthorizationRequest ($ psrRequest ));
44+ $ authRequest = $ this ->withErrorHandling (
45+ fn () => $ this ->server ->validateAuthorizationRequest ($ psrRequest ),
46+ ($ psrRequest ->getQueryParams ()['response_type ' ] ?? null ) === 'token '
47+ );
4548
4649 if ($ this ->guard ->guest ()) {
47- if ($ request ->get ('prompt ' ) === 'none ' ) {
48- return $ this ->denyRequest ($ authRequest );
49- }
50-
51- $ this ->promptForLogin ($ request );
50+ $ request ->get ('prompt ' ) === 'none '
51+ ? throw OAuthServerException::loginRequired ($ authRequest )
52+ : $ this ->promptForLogin ($ request );
5253 }
5354
5455 if ($ request ->get ('prompt ' ) === 'login ' &&
@@ -62,17 +63,19 @@ public function authorize(ServerRequestInterface $psrRequest, Request $request):
6263
6364 $ request ->session ()->forget ('promptedForLogin ' );
6465
65- $ scopes = $ this ->parseScopes ($ authRequest );
6666 $ user = $ this ->guard ->user ();
67+ $ authRequest ->setUser (new User ($ user ->getAuthIdentifier ()));
68+
69+ $ scopes = $ this ->parseScopes ($ authRequest );
6770 $ client = $ this ->clients ->find ($ authRequest ->getClient ()->getIdentifier ());
6871
6972 if ($ request ->get ('prompt ' ) !== 'consent ' &&
7073 ($ client ->skipsAuthorization ($ user , $ scopes ) || $ this ->hasGrantedScopes ($ user , $ client , $ scopes ))) {
71- return $ this ->approveRequest ($ authRequest, $ user );
74+ return $ this ->approveRequest ($ authRequest );
7275 }
7376
7477 if ($ request ->get ('prompt ' ) === 'none ' ) {
75- return $ this -> denyRequest ($ authRequest, $ user );
78+ throw OAuthServerException:: consentRequired ($ authRequest );
7679 }
7780
7881 $ request ->session ()->put ('authToken ' , $ authToken = Str::random ());
@@ -121,44 +124,13 @@ protected function hasGrantedScopes(Authenticatable $user, Client $client, array
121124 /**
122125 * Approve the authorization request.
123126 */
124- protected function approveRequest (AuthorizationRequestInterface $ authRequest, Authenticatable $ user ): Response
127+ protected function approveRequest (AuthorizationRequestInterface $ authRequest ): Response
125128 {
126- $ authRequest ->setUser (new User ($ user ->getAuthIdentifier ()));
127-
128129 $ authRequest ->setAuthorizationApproved (true );
129130
130131 return $ this ->withErrorHandling (fn () => $ this ->convertResponse (
131132 $ this ->server ->completeAuthorizationRequest ($ authRequest , new Psr7Response )
132- ));
133- }
134-
135- /**
136- * Deny the authorization request.
137- */
138- protected function denyRequest (AuthorizationRequestInterface $ authRequest , ?Authenticatable $ user = null ): Response
139- {
140- if (is_null ($ user )) {
141- $ uri = $ authRequest ->getRedirectUri ()
142- ?? (is_array ($ authRequest ->getClient ()->getRedirectUri ())
143- ? $ authRequest ->getClient ()->getRedirectUri ()[0 ]
144- : $ authRequest ->getClient ()->getRedirectUri ());
145-
146- $ separator = $ authRequest ->getGrantTypeId () === 'implicit ' ? '# ' : '? ' ;
147-
148- $ uri = $ uri .(str_contains ($ uri , $ separator ) ? '& ' : $ separator ).'state= ' .$ authRequest ->getState ();
149-
150- return $ this ->withErrorHandling (function () use ($ uri ) {
151- throw OAuthServerException::accessDenied ('Unauthenticated ' , $ uri );
152- });
153- }
154-
155- $ authRequest ->setUser (new User ($ user ->getAuthIdentifier ()));
156-
157- $ authRequest ->setAuthorizationApproved (false );
158-
159- return $ this ->withErrorHandling (fn () => $ this ->convertResponse (
160- $ this ->server ->completeAuthorizationRequest ($ authRequest , new Psr7Response )
161- ));
133+ ), $ authRequest ->getGrantTypeId () === 'implicit ' );
162134 }
163135
164136 /**
0 commit comments