Microsoft-login faalt met 400 "email: Cannot be blank" — Graph userinfo levert geen e-mailclaim voor accounts zonder mail-attribuut #24
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Na de fix van #22 faalt de Microsoft-login met een nieuwe fout:
Root cause (gereproduceerd met mock-Entra, PocketBase v0.30.4)
De provider haalt de gebruikersclaims op via Graph
https://graph.microsoft.com/oidc/userinfo. Dat endpoint geeft deemail-claim alleen terug als het account een mail-attribuut heeft (Exchange-mailbox). Voor accounts zonder mail-attribuut (gebruikelijk in lab-/testtenants) ontbreekt de claim → PocketBase maakt het record aan met lege e-mail →emailis verplicht opteam_members→ 400 "Failed to create record".De fingerprint-matrix uit de analyse (token-fail / userinfo-fail / e-mail-ontbreekt) matcht exact op de derde variant; de door de gebruiker aangeleverde response-body is identiek aan de lokaal gereproduceerde.
Fix (twee lagen, beide nodig voor robuustheid)
userInfoURL: ""in de provider-config). Het Entra v2 id_token bevat naastemail(indien aanwezig) áltijdpreferred_username— de UPN, bij Respellion gelijk aan het primaire e-mailadres. Empirisch geverifieerd: PocketBase maptpreferred_username→usernameen houdt de volledige claims beschikbaar inrawUser. De provider-config gaat via de #18-reconciler, dus Labs flipt automatisch bij de eerstvolgende deploy-boot — geen migratie nodig.onRecordAuthWithOAuth2Request-hook: als deemail-claim leeg is enpreferred_usernameeen geldig e-mailadres is (regex-guard; guest-UPN's met#EXT#vallen er bewust buiten), wordt die als e-mail gebruikt (lowercased — matcht deENTRA_ADMIN_EMAILS-allow-list). De hook logt bovendien elke gefaalde OAuth2-poging met de onderliggende fout naar de containerlog — de observability die we bij deze debugsessie misten.Lokaal bewezen: id_token zonder e-mailclaim → record met
email=rve@respellion.nl,role=adminvia allow-list, onboarding-defaults gezet.Verificatie
Alternatief overwogen en afgewezen
Mail-attribuut zetten op de Entra-accounts lost het voor dít account op, maar laat de app fragiel voor elk volgend account zonder mailbox; de UPN-fallback maakt de login deterministisch voor alle organisatie-accounts.
Gerelateerd: #16, #18, #20, #22 (PR #23 — nog niet gemerged; deze fix stapelt daarop).