Skip to content

Commit be96bf2

Browse files
authored
Merge pull request #256 from ajgarlag/fix-fragment-urls
Fix redirection URLs when implicit grant is denied
2 parents 5d34d5a + f591175 commit be96bf2

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/Controller/AuthorizationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public function indexAction(Request $request): Response
111111

112112
$response = $this->server->completeAuthorizationRequest($authRequest, $serverResponse);
113113
} catch (OAuthServerException $e) {
114-
$response = $e->generateHttpResponse($serverResponse);
114+
$response = $e->generateHttpResponse($serverResponse, str_contains($e->getRedirectUri() ?? '', '#'));
115115
}
116116

117117
return $this->httpFoundationFactory->createResponse($response);

tests/Acceptance/AuthorizationEndpointTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,4 +545,33 @@ public function testFailedAuthorizeRequest(): void
545545
$this->assertSame('The authorization grant type is not supported by the authorization server.', $jsonResponse['error_description']);
546546
$this->assertSame('Check that all required parameters have been provided', $jsonResponse['hint']);
547547
}
548+
549+
public function testUnathorizedImplicitRequest(): void
550+
{
551+
$this->loginUser();
552+
553+
$this->client->request(
554+
'GET',
555+
'/authorize',
556+
[
557+
'client_id' => FixtureFactory::FIXTURE_CLIENT_FIRST,
558+
'response_type' => 'token',
559+
'state' => 'foobar',
560+
]
561+
);
562+
563+
$response = $this->client->getResponse();
564+
565+
$this->assertSame(302, $response->getStatusCode());
566+
$redirectUri = $response->headers->get('Location');
567+
568+
$this->assertStringStartsWith(FixtureFactory::FIXTURE_CLIENT_FIRST_REDIRECT_URI, $redirectUri);
569+
$fragment = [];
570+
parse_str(parse_url($redirectUri, \PHP_URL_FRAGMENT), $fragment);
571+
$this->assertArrayHasKey('error', $fragment);
572+
$this->assertArrayHasKey('error_description', $fragment);
573+
$this->assertArrayHasKey('state', $fragment);
574+
$this->assertEquals('access_denied', $fragment['error']);
575+
$this->assertEquals('foobar', $fragment['state']);
576+
}
548577
}

0 commit comments

Comments
 (0)