Accedi con Apple

I problemi 1 e 2 sono causati da una scelta deliberata di implementazione da parte di Apple. Quindi non si tratta realmente di un incidente tecnico e possiamo trovare una soluzione alternativa. Il problema 3 riguarda il gem omniauth-apple, quindi possiamo risolverlo.

Ciò di cui abbiamo bisogno da Apple è includere nome ed e-mail nei flussi di autenticazione successivi. Purtroppo hanno riconosciuto il comportamento, affermando che funziona come previsto: https://forums.developer.apple.com/thread/121496

Questo si comporta correttamente: le informazioni sull’utente vengono inviate solo in ASAuthorizationAppleIDCredential durante la prima registrazione dell’utente. Gli accessi successivi alla tua app tramite “Accedi con Apple” con lo stesso account non condividono alcuna informazione sull’utente e restituiranno solo un identificatore utente in ASAuthorizationAppleIDCredential. Si consiglia di memorizzare in modo sicuro l’ASAuthorizationAppleIDCredential iniziale contenente le informazioni sull’utente fino a quando non si può verificare che un account sia stato creato con successo sul tuo server.

Tuttavia, sono curioso: qualcuno ha visto altri siti web che utilizzano “Accedi con Apple”? Credo di aver visto solo app native che lo utilizzano :thinking:

3 Mi Piace

Questa funzione ha molto senso per me: la nostra app iOS si collega al nostro sito web Discourse e l’app non richiede alcun login per le altre funzionalità.
È molto comodo per gli utenti accedere con questo metodo, poiché la maggior parte è già connessa sul dispositivo e Apple Pay, utilizzato per gli acquisti in-app, utilizza lo stesso account.

A mio parere avrebbe comunque senso contattare l’assistenza DTS di Apple per vedere quale soluzione alternativa suggeriscono e per fornire loro il feedback che questa situazione sta causando problemi. (Purtroppo non ho conoscenze sufficienti sull’argomento per avere questa conversazione direttamente con loro.)

Non è affatto diffuso quanto Google/FB/altre, ma l’ho visto in alcuni casi, ad esempio su ebay.com, wordpress.com e kayak.com.

3 Mi Piace

Tuttavia, potrebbero utilizzare un’API diversa. Esiste uno script JS che puoi aggiungere, ma che, a quanto pare, non si integrerà con il sistema OAuth più generico di Discourse:

Prendiamo come esempio Kayak.com.

Se faccio un po’ di investigazione nell’ispettore del browser, trovo questo:

image

1 Mi Piace

Stanno usando la libreria JavaScript di Apple, sì. Ma dietro le quinte utilizza comunque la stessa API ‘OAuth’ (ma non davvero OAuth).

Ebay non sta nemmeno cercando di recuperare le informazioni dell’utente. Dopo aver effettuato l’accesso con Apple, ti viene chiesto di inserire la tua email:

Sospetto che Kayak e Wordpress stiano memorizzando nella cache le informazioni dell’utente dal primo tentativo di autenticazione, come consigliato da Apple.

Immagino che questa sia probabilmente l’approccio che dovremo adottare, ma non è particolarmente robusto (ad esempio, se la connessione di rete viene interrotta durante il primo tentativo, o se Discourse viene ripristinato da un backup, o se l’utente cambia il proprio indirizzo email Apple). E, a mio avviso, è leggermente peggiore dal punto di vista della privacy (dobbiamo memorizzare le email per utenti che non si sono nemmeno ancora registrati!)

6 Mi Piace

Penso che tutti i recenti aggiornamenti di iOS di Apple rendano ora questa soluzione praticabile, no?

3 Mi Piace

Recentemente è cambiato qualcosa riguardo all’accesso con Apple?

Possiamo certamente farlo funzionare così com’è: richiederà qualche giorno per lavorare intorno a questi problemi. Tuttavia, saremo comunque limitati a ricevere solo l’email e il nome al primo accesso.

5 Mi Piace

Credo che l’abbiano leggermente affinato, ma non riesco a trovare facilmente modifiche specifiche.

Penso che ricevere una sola email non sia un grosso problema? Immagino che dovremo testare cosa succede quando si cambia l’email del proprio ID Apple.

3 Mi Piace

Dovremmo continuare a ricevere lo stesso UID, ma non riceveremo il nuovo indirizzo e-mail. L’utente dovrà aggiornarlo manualmente su Discourse.

3 Mi Piace

Immagino che dovremmo ricontrollare, ma onestamente non vedo questo come un enorme ostacolo che ci impedisce di implementarlo.

Il flusso di accesso su iDevice è semplicemente fantastico con l’accesso tramite Apple, e in più ottieni l’autenticazione a due fattori con Face ID.

5 Mi Piace

:+1: lo aggiungerò alla mia lista per portare il plugin allo stato necessario, così da poterlo testare. Se funziona correttamente, possiamo integrarlo nel core con relativa facilità.

13 Mi Piace

Ho passato il repository a David, che lo ha spostato su Discourse :slight_smile:

Grazie per aver accettato di occupartene.

11 Mi Piace

Ho letto questo argomento 2-3 volte, ma non ricordo se voi avete provato a estrarre l’email dal token JWT fornito.

Questo è come lo faccio io nel codice nativo. Non sono sicuro che la web API lo consenta.

Al primo accesso, puoi ottenere l’email direttamente da ASAuthorizationAppleIDCredential.email.
Per gli accessi successivi, l’email può essere trovata se decodifichi i dati JWT e recuperi il campo “email”.

Con questo, la funzionalità può essere implementata, giusto?
L’email fornita sarà quella scelta dall’utente, personale o casuale.

Sì, è corretto.

Non è la mia esperienza, no. Quando ho controllato l’ultima volta, il JWT non conteneva l’email negli accessi successivi.

Comunque, abbiamo intenzione di risolvere questo problema a breve e aggiornerò questo argomento quando sarà pronto :slight_smile:

4 Mi Piace

È strano, perché su nativo è funzionante usando solo la proprietà email del JWT.

Se non aggiornano la versione web per renderla simile, l’unica soluzione potrebbe essere generare automaticamente un’email fittizia (già confermata) e permettere all’utente di modificarla in seguito, se lo desidera.

Questo significherebbe affidarsi all’ID fornito da Apple, che non è una soluzione così male, ma lascia un po’ di cattivo odore :slight_smile:.

4 Mi Piace

È molto probabile che abbiano migliorato le cose: farò un doppio controllo :+1:

6 Mi Piace

Sappiamo che possiamo far funzionare questa soluzione. Ciò che si complica è:

  • L’email del tuo Apple ID è jane.champion@somewhere.com

  • Ti iscrivi a Discourse con Apple

  • Modifichi l’email del tuo Apple ID in jane.row@somewhere.com

  • Accedi a Discourse… pensiamo ancora che tu sia jane.champion@somewhere.com

  • Le tue notifiche email su Discourse rimbalzeranno per sempre.

Non è chiaro quale processo sia in atto quando le email degli Apple ID cambiano e come possiamo reagire, se possibile.

La mia decisione al riguardo è… che ci dobbiamo semplicemente rassegnare a questo caso limite e, almeno, gli utenti possono scegliere di cambiare le email su Discourse per casi limite come questo.

3 Mi Piace

Oggi ho fatto dei test e la buona notizia è che sembra che Apple abbia risolto il problema :smiley: Vedo l’indirizzo email presente in ogni autenticazione.

Ci sono ancora alcune questioni da risolvere, ma spero di avere qualcosa di pubblico entro questa settimana.

13 Mi Piace

Direi che questo è certamente un candidato per essere incluso in Discourse. Dovremmo puntare a integrare il codice nel core o almeno a includere il plugin nel prossimo rilascio maggiore (certamente non quello della prossima settimana, però :)).

13 Mi Piace

Sì, possiamo spostarlo da plugin a core in un secondo momento con un minimo sforzo. Un problema è che è estremamente difficile da configurare rispetto a Google/Facebook/ecc.

È necessario un account sviluppatore Apple (a pagamento?) e bisogna configurare tutti i tipi di verifica del dominio e certificati. È certamente fattibile con una buona guida howto.

13 Mi Piace