Skip to content

Commit bc1f1d9

Browse files
committed
OIDC: Added extra userinfo content-type normalisation and test
During review of #5337
1 parent 17f7afe commit bc1f1d9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

app/Access/Oidc/OidcUserinfoResponse.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ class OidcUserinfoResponse implements ProvidesClaims
1111

1212
public function __construct(ResponseInterface $response, string $issuer, array $keys)
1313
{
14-
$contentType = explode(';', $response->getHeader('Content-Type')[0], 2)[0];
14+
$contentTypeHeaderValue = $response->getHeader('Content-Type')[0] ?? '';
15+
$contentType = strtolower(trim(explode(';', $contentTypeHeaderValue, 2)[0]));
16+
1517
if ($contentType === 'application/json') {
1618
$this->claims = json_decode($response->getBody()->getContents(), true);
1719
}

tests/Auth/OidcTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,20 @@ public function test_userinfo_endpoint_fetch_can_parsed_nested_groups()
787787
$this->assertTrue($user->hasRole($roleA->id));
788788
}
789789

790+
public function test_userinfo_endpoint_response_with_complex_json_content_type_handled()
791+
{
792+
$userinfoResponseData = [
793+
'sub' => OidcJwtHelper::defaultPayload()['sub'],
794+
'name' => 'Barry',
795+
];
796+
$userinfoResponse = new Response(200, ['Content-Type' => 'Application/Json ; charset=utf-8'], json_encode($userinfoResponseData));
797+
$resp = $this->runLogin(['name' => null], [$userinfoResponse]);
798+
$resp->assertRedirect('/');
799+
800+
$user = User::where('email', OidcJwtHelper::defaultPayload()['email'])->first();
801+
$this->assertEquals('Barry', $user->name);
802+
}
803+
790804
public function test_userinfo_endpoint_jwks_response_handled()
791805
{
792806
$userinfoResponseData = OidcJwtHelper::idToken(['name' => 'Barry Jwks']);

0 commit comments

Comments
 (0)