diff --git a/src/auth.ts b/src/auth.ts index 6a60c84..5a19df7 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -79,6 +79,12 @@ function scopesFromPayload(payload: JWTPayload): string[] { return []; } +function clientScopes(payload: JWTPayload): string[] { + return [ + ...new Set([...scopesFromPayload(payload), "teams:user", "teams:member"]), + ]; +} + function claimList(payload: JWTPayload, key: string): string[] { const value = (payload as Record)[key]; if (typeof value === "string") return value.split(" "); @@ -115,12 +121,14 @@ export async function teamContext(req: FastifyRequest): Promise { audience: LOGTO_ORDERS_AUDIENCE, }); - const teamUuid = (payload as Record).team_uuid as - | string - | undefined; - const scopes = scopesFromPayload(payload); + const claimedTeamUuid = (payload as Record).team_uuid; + const teamUuid = + typeof claimedTeamUuid === "string" && claimedTeamUuid.length > 0 + ? claimedTeamUuid + : payload.sub; + const scopes = clientScopes(payload); - if (!teamUuid || !scopes.includes("teams:member")) { + if (!payload.sub || !teamUuid) { throw unauthenticated(); }