fix(auth): store OIDC raw claims as arrays

Handle missing provider payloads by persisting an empty array and add
coverage for multi-audience OIDC azp validation.
This commit is contained in:
Andras Bacsai
2026-06-15 13:33:23 +02:00
parent e1b47d0cf0
commit c656892738
3 changed files with 43 additions and 3 deletions
+5 -3
View File
@@ -66,7 +66,9 @@ class OauthLoginService
throw new HttpException(403, 'OIDC provider did not verify the email address');
}
return DB::transaction(function () use ($oauthUser, $oauthSetting, $email, $issuer, $subject, $emailVerified) {
$rawClaims = is_array($oauthUser->user ?? null) ? $oauthUser->user : [];
return DB::transaction(function () use ($oauthUser, $oauthSetting, $email, $issuer, $subject, $emailVerified, $rawClaims) {
$identity = OauthIdentity::where([
'provider' => 'oidc',
'issuer' => $issuer,
@@ -76,7 +78,7 @@ class OauthLoginService
if ($identity) {
$identity->update([
'email' => $email,
'raw_claims' => $oauthUser->user,
'raw_claims' => $rawClaims,
'last_login_at' => now(),
]);
@@ -107,7 +109,7 @@ class OauthLoginService
'issuer' => $issuer,
'provider_user_id' => $subject,
'email' => $email,
'raw_claims' => $oauthUser->user,
'raw_claims' => $rawClaims,
'last_login_at' => now(),
]);