$hasEmpty = empty($this->externalId)
|| empty($this->email)
|| empty($this->name)
- || ($groupSyncActive && empty($this->groups));
+ || ($groupSyncActive && $this->groups === null);
return !$hasEmpty;
}
return implode(' ', $displayName);
}
- protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): array
+ protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): ?array
{
if (empty($groupsClaim)) {
- return [];
+ return null;
}
$groupsList = Arr::get($token->getAllClaims(), $groupsClaim);
if (!is_array($groupsList)) {
- return [];
+ return null;
}
return array_values(array_filter($groupsList, function ($val) {
$this->assertSessionError('Userinfo endpoint response validation failed with error: No valid subject value found in userinfo data');
}
+ public function test_userinfo_endpoint_not_called_if_empty_groups_array_provided_in_id_token()
+ {
+ config()->set([
+ 'oidc.user_to_groups' => true,
+ 'oidc.groups_claim' => 'groups',
+ 'oidc.remove_from_groups' => false,
+ ]);
+
+ $this->post('/oidc/login');
+ $state = session()->get('oidc_state');
+ $client = $this->mockHttpClient([$this->getMockAuthorizationResponse([
+ 'groups' => [],
+ ])]);
+
+ $resp = $this->get('/oidc/callback?code=SplxlOBeZQQYbYS6WxSbIA&state=' . $state);
+ $resp->assertRedirect('/');
+ $this->assertEquals(1, $client->requestCount());
+ $this->assertTrue(auth()->check());
+ }
+
protected function withAutodiscovery(): void
{
config()->set([