SSO e avatar esterni

When using SSO with sso overrides avatar: true, Discourse seems to download the avatar and always serve it locally instead of linking directly to the URL provided.

Would it make more sense to allow avatars to serve directly from the avatar_url provided? As is, for each avatar shown it hits Discourse backend somewhat needlessly. Perhaps this could be a SSO option?

If the concern is that avatars may go missing, that could be handled with the image onerror event that fallback’s src to the locally downloaded copy (or show a default one). What I don’t know is if too large avatars images can be constrained with CSS alone.

1 Mi Piace

I believe disabling download_remote_images_to_local should solve your issue, although this will also serve images within posts remotely instead of locally.

That seems to be only for images in posts — or perhaps for local avatar too, when they are not overwritten by SSO.

1 Mi Piace

Interesting. I know that the OIDC Plugin allows you to override email on every login, maybe something like this would be possible for avatar’s being overwritten by SSO as well.

If the SSO avatar is in the format of https://central.avatar.service/<username> you can use the external_system_avatars_url site setting to get this feature.

It’s not in our case (they are served from S3) — and it’s unlikely to usually be in that format so that it can be efficiently cached.

A distanza di un paio d’anni, dato che penso di aver precedentemente frainteso qualcosa, ritengo che ci sia ancora un facile miglioramento delle prestazioni qui.

In precedenza pensavo che gli avatar fossero archiviati localmente (sul server Discourse stesso) e mi chiedevo perché non venissero serviti direttamente dall’URL dell’avatar esterno SSO invece di raggiungere Discourse. Tuttavia, dopo qualche indagine, ora vedo che gli avatar esterni provenienti dall’SSO sono già caricati nello storage di oggetti (ad esempio S3) e nelle diverse dimensioni richieste.

Quindi, se ho capito bene, attualmente Discourse sta inoltrando gli avatar dallo storage di oggetti al client. Tuttavia, questo comportamento sembra specifico per quando si utilizzano avatar esterni SSO, poiché gli avatar qui su meta provengono direttamente dallo storage di oggetti (con CDN). Ma quando si utilizza l’SSO con URL esterni, gli URL degli avatar sono nella forma

https://discourse-host/user_avatar/discourse-host/{username}/{size}/{uploadid}_{version}.png

dove raggiunge rails per ogni avatar visualizzato (prima di essere memorizzato nella cache dal client).

E se ho capito il codice, c’è anche un’impostazione per consentire un reindirizzamento invece di inoltrarlo, ma a quel punto ha già raggiunto rails e il reindirizzamento aggiunge solo tempo al tempo di caricamento per il client.

Non sarebbe più veloce collegare semplicemente gli avatar allo storage di oggetti (potenzialmente servendoli da una CDN) liberando contemporaneamente alcune risorse rails? /cc @Falco

Non è così. Per impostazione predefinita, Discourse effettuerà il proxy delle richieste per le immagini del profilo, come vedi sul tuo sito.

Tuttavia, l’anno scorso abbiamo introdotto un’impostazione che può essere abilitata tramite ENV DISCOURSE_REDIRECT_AVATAR_REQUESTS=1 per attivare il comportamento che vedi qui.

1 Mi Piace