Skip to content

Commit 0ee1d8b

Browse files
[13.x] Always validate auth token (#1769)
* fix trait * fix tests
1 parent 4ffc542 commit 0ee1d8b

7 files changed

+17
-33
lines changed

src/Http/Controllers/AccessTokenController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class AccessTokenController
1111
{
12-
use HandlesOAuthErrors;
12+
use ConvertsPsrResponses, HandlesOAuthErrors;
1313

1414
/**
1515
* The authorization server.

src/Http/Controllers/ApproveAuthorizationController.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ public function __construct(AuthorizationServer $server)
3636
*/
3737
public function approve(Request $request)
3838
{
39-
$this->assertValidAuthToken($request);
40-
4139
$authRequest = $this->getAuthRequestFromSession($request);
4240

4341
$authRequest->setAuthorizationApproved(true);

src/Http/Controllers/AuthorizationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
class AuthorizationController
2020
{
21-
use HandlesOAuthErrors;
21+
use ConvertsPsrResponses, HandlesOAuthErrors;
2222

2323
/**
2424
* The authorization server.

src/Http/Controllers/DenyAuthorizationController.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ public function __construct(AuthorizationServer $server)
3636
*/
3737
public function deny(Request $request)
3838
{
39-
$this->assertValidAuthToken($request);
40-
4139
$authRequest = $this->getAuthRequestFromSession($request);
4240

4341
$authRequest->setAuthorizationApproved(false);

src/Http/Controllers/RetrievesAuthRequestFromSession.php

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,25 @@
66
use Illuminate\Http\Request;
77
use Laravel\Passport\Bridge\User;
88
use Laravel\Passport\Exceptions\InvalidAuthTokenException;
9+
use League\OAuth2\Server\RequestTypes\AuthorizationRequest;
910

1011
trait RetrievesAuthRequestFromSession
1112
{
1213
/**
13-
* Make sure the auth token matches the one in the session.
14-
*
15-
* @param \Illuminate\Http\Request $request
16-
* @return void
14+
* Get the authorization request from the session.
1715
*
1816
* @throws \Laravel\Passport\Exceptions\InvalidAuthTokenException
17+
* @throws \Exception
1918
*/
20-
protected function assertValidAuthToken(Request $request)
19+
protected function getAuthRequestFromSession(Request $request): AuthorizationRequest
2120
{
22-
if ($request->has('auth_token') && $request->session()->get('authToken') !== $request->get('auth_token')) {
21+
if ($request->isNotFilled('auth_token') || $request->session()->pull('authToken') !== $request->get('auth_token')) {
2322
$request->session()->forget(['authToken', 'authRequest']);
2423

2524
throw InvalidAuthTokenException::different();
2625
}
27-
}
2826

29-
/**
30-
* Get the authorization request from the session.
31-
*
32-
* @param \Illuminate\Http\Request $request
33-
* @return \League\OAuth2\Server\RequestTypes\AuthorizationRequest
34-
*
35-
* @throws \Exception
36-
*/
37-
protected function getAuthRequestFromSession(Request $request)
38-
{
39-
return tap($request->session()->get('authRequest'), function ($authRequest) use ($request) {
27+
return tap($request->session()->pull('authRequest'), function ($authRequest) use ($request) {
4028
if (! $authRequest) {
4129
throw new Exception('Authorization request was not present in the session.');
4230
}

tests/Unit/ApproveAuthorizationControllerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public function test_complete_authorization_request()
2626

2727
$request = m::mock(Request::class);
2828
$request->shouldReceive('session')->andReturn($session = m::mock());
29-
$request->shouldReceive('has')->with('auth_token')->andReturn(true);
29+
$request->shouldReceive('isNotFilled')->with('auth_token')->andReturn(false);
3030
$request->shouldReceive('get')->with('auth_token')->andReturn('foo');
3131

32-
$session->shouldReceive('get')->once()->with('authToken')->andReturn('foo');
33-
$session->shouldReceive('get')
32+
$session->shouldReceive('pull')->once()->with('authToken')->andReturn('foo');
33+
$session->shouldReceive('pull')
3434
->once()
3535
->with('authRequest')
3636
->andReturn($authRequest = m::mock(AuthorizationRequest::class));

tests/Unit/DenyAuthorizationControllerTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ public function test_authorization_can_be_denied()
2828

2929
$request->shouldReceive('session')->andReturn($session = m::mock());
3030
$request->shouldReceive('user')->andReturn(new DenyAuthorizationControllerFakeUser);
31-
$request->shouldReceive('has')->with('auth_token')->andReturn(true);
31+
$request->shouldReceive('isNotFilled')->with('auth_token')->andReturn(false);
3232
$request->shouldReceive('get')->with('auth_token')->andReturn('foo');
3333

34-
$session->shouldReceive('get')->once()->with('authToken')->andReturn('foo');
35-
$session->shouldReceive('get')
34+
$session->shouldReceive('pull')->once()->with('authToken')->andReturn('foo');
35+
$session->shouldReceive('pull')
3636
->once()
3737
->with('authRequest')
3838
->andReturn($authRequest = m::mock(
@@ -65,11 +65,11 @@ public function test_auth_request_should_exist()
6565
$request->shouldReceive('session')->andReturn($session = m::mock());
6666
$request->shouldReceive('user')->never();
6767
$request->shouldReceive('input')->never();
68-
$request->shouldReceive('has')->with('auth_token')->andReturn(true);
68+
$request->shouldReceive('isNotFilled')->with('auth_token')->andReturn(false);
6969
$request->shouldReceive('get')->with('auth_token')->andReturn('foo');
7070

71-
$session->shouldReceive('get')->once()->with('authToken')->andReturn('foo');
72-
$session->shouldReceive('get')->once()->with('authRequest')->andReturnNull();
71+
$session->shouldReceive('pull')->once()->with('authToken')->andReturn('foo');
72+
$session->shouldReceive('pull')->once()->with('authRequest')->andReturnNull();
7373

7474
$server->shouldReceive('completeAuthorizationRequest')->never();
7575

0 commit comments

Comments
 (0)