Tentei atualizar nosso fork do plugin para usar a versão mais recente do omniauth-apple. (Note que há outras alterações necessárias, não apenas um aumento no número da versão).
tl;dr: ainda está quebrado
Consegui fazer funcionar com uma gambiarra no meu sandbox, mas ainda apresenta vários problemas:
-
A Apple está usando uma requisição POST no callback. Isso não é comum em implementações OAuth, pois significa que cookies com
samesite=Laxnão serão enviados com a requisição. Isso impede que o Discourse leia os cookies de sessão durante o callback e, portanto, lança um erro CSRF.Uma solução INSEGURA é desabilitar essa segurança alterando os cookies do Discourse para
samesite=None. -
Usar uma requisição POST sem um token CSRF também dispara outra medida de segurança no núcleo do sistema.
Uma solução INSEGURA é remover esta linha.
-
Estava recebendo um erro 403 da Apple quando o gem omniauth estava buscando os JWKs. Suspeito que o cabeçalho
Accept:não esteja sendo definido corretamente, mas ainda não verifiquei isso.Uma solução INSEGURA foi codificar as chaves manualmente.
Após tudo isso, finalmente consegui fazer login com a Apple. Você pode testar em https://sandbox.dtaylor.uk (vou deixar funcionando por alguns dias, mas por favor, não insira nada sensível lá, pois é INSEGURO).
E então… e-mails e nomes ainda são incluídos apenas na primeira autenticação. Você pode testar isso: faça login com a Apple, cancele a criação da conta e tente novamente. Na segunda tentativa, seus dados estarão ausentes.
Então, supondo que a Apple não vá mudar nada em breve… como poderíamos fazer isso funcionar?
Para (1) e (2), acho que poderíamos converter o POST da Apple em um GET sem comprometer a segurança. Ao receber um POST no callback, renderizamos algum JavaScript que define window.location='/auth/apple/callback?code=...&state=...'. A partir daí, funcionaria como qualquer outro provedor. No entanto, acho que interceptar o POST exigiria algumas alterações na API central.
Para (3), acredito que isso poderia ser corrigido com um pouco de trabalho no gem omniauth.
Mas ainda estamos presos sem nome/e-mail, então não tenho certeza se vale a pena corrigir esses outros problemas ![]()