| Resumo | Discourse OAuth2 Basic suporta provedores OAuth2 básicos, assumindo que eles tenham um endpoint de API JSON onde os detalhes do usuário podem ser recuperados por token. | |
| Guia de Instalação | Este plugin está incluído no núcleo do Discourse. Não há necessidade de instalá-lo separadamente. |
Recursos
Este plugin permite que você use um provedor OAuth2 básico como autenticação para o Discourse. Deve funcionar com muitos provedores, com a ressalva de que eles devem fornecer um endpoint JSON para recuperar informações sobre o usuário que está fazendo login.
Isso é principalmente útil para pessoas que estão usando provedores de login que não são muito populares. Se você quiser usar Google, Facebook ou Twitter, eles já estão incluídos e você não precisa deste plugin. Você também pode procurar outros provedores de login em nosso Repositório no Github.
Configuração
Configuração Básica
- Primeiro, registre sua aplicação Discourse com seu provedor OAuth2. Será necessário um URI de Redirecionamento que será:
http://DISCOURSE_HOST/auth/oauth2_basic/callback
Substitua
DISCOURSE_HOSTpelo valor apropriado e certifique-se de estar usandohttpsse estiver habilitado. O provedor OAuth2 deve fornecer umclient IDesecret, bem como alguns URLs.
- Acesse Admin → Configurações → Login OAuth2 e preencha a configuração básica para o provedor OAuth2:
oauth2_enabled- marque esta opção para habilitar o recursooauth2_client_id- o client ID do seu provedoroauth2_client_secret- o client secret do seu provedoroauth2_authorize_url- URL de autorização do seu provedoroauth2_token_url- URL de token do seu provedor.
Se você não conseguir descobrir os valores das configurações acima, consulte a documentação de desenvolvedor do seu provedor ou entre em contato com o suporte ao cliente deles.
Configurando o Endpoint de Usuário JSON
O Discourse agora é capaz de receber um token de autorização do seu provedor OAuth2. Infelizmente, o Discourse precisa de mais informações para completar a autenticação.
Precisamos de um endpoint de API que possa ser acessado para recuperar informações sobre o usuário com base no token.
Por exemplo, o provedor OAuth2 SoundCloud fornece tal URL. Se você tiver um token OAuth2 para o SoundCloud, pode fazer uma solicitação GET para https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN e receberá um objeto JSON contendo informações sobre o usuário.
Para configurar isso no Discourse, precisamos definir o valor da configuração oauth2_user_json_url. Neste caso, inseriremos o valor:
https://api.soundcloud.com/me?oauth_token=:token
A parte com :token informa ao Discourse que ele precisa substituir esse valor pelo token de autorização recebido quando a autenticação foi concluída.
Há um último passo para completar. Precisamos informar ao Discourse quais atributos estão disponíveis no JSON recebido. Aqui está uma resposta de exemplo do SoundCloud:
{
"id": 3207,
"permalink": "jwagener",
"username": "Johannes Wagener",
"uri": "https://api.soundcloud.com/users/3207",
"permalink_url": "http://soundcloud.com/jwagener",
"avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
"country": "Alemanha",
"full_name": "Johannes Wagener",
"city": "Berlim"
}
As variáveis oauth2_json_user_id_path, oauth2_json_username_path, oauth2_json_name_path e oauth2_json_email_path devem ser configuradas para apontar para os atributos apropriados no JSON.
O único atributo obrigatório é id - precisamos dele para que, quando o usuário fizer login no futuro, possamos recuperar a conta correta. Os outros são ótimos se disponíveis — eles tornarão o processo de cadastro mais rápido para o usuário, pois serão pré-preenchidos no formulário.
Veja como configurei as configurações de caminho JSON:
oauth2_json_user_id_path: 'id'
oauth2_json_username_path: 'permalink'
oauth2_json_name_path: 'full_name'
Usei permalink porque parece mais semelhante ao que o Discourse espera para um nome de usuário do que o username em seu JSON. Note que omiti o caminho do e-mail: o SoundCloud não fornece um e-mail, então o usuário terá que fornecer e verificar isso quando se cadastrar pela primeira vez no Discourse.
Se as propriedades que você deseja do seu objeto JSON estiverem aninhadas, você pode usar pontos. Por exemplo, se a API retornasse uma estrutura diferente como esta:
{
"user": {
"id": 1234,
"email": {
"address": "test@example.com"
}
}
}
Você poderia usar user.id para o oauth2_json_user_id_path e user.email.address para oauth2_json_email_path.
Se a própria chave incluir pontos, você precisará colocá-la entre aspas duplas ou escapar os pontos com uma barra invertida. Por exemplo, dado este JSON:
{
"example.com/uid": "myuid"
}
Você especificaria o caminho como example\.com/uid ou "example.com/uid".
Se você definir
oauth2_json_email_path, o provedor OAuth2 deve confirmar que o usuário é o dono desse endereço de e-mail. Não fazer isso pode resultar em tomada de conta no Discourse!
Hospedado por nós? Este plugin está disponível em nossos planos Business e Enterprise. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion
Precisa automatizar cadastros de usuários? Veja Auto-provisioning user accounts when SSO is enabled