| 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 meio de um token. | |
| Guia de Instalação | Este plugin já vem 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 método de autenticação para o Discourse. Ele deve funcionar com muitos provedores, desde que estes forneçam 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ê deseja usar Google, Facebook ou Twitter, esses já estão incluídos nativamente 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 usarhttpsse estiver habilitado. O provedor OAuth2 deve fornecer umclient IDesecret, além de algumas 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 fornecido pelo seu provedoroauth2_client_secret- o client secret fornecido pelo seu provedoroauth2_authorize_url- a URL de autorização do seu provedoroauth2_token_url- a URL de token do seu provedor.
Se você não conseguir descobrir os valores para as 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 JSON do Usuário
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 uma URL como essa. Se você tiver um token OAuth2 para o SoundCloud, pode fazer uma requisiçã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 indica ao Discourse que ele deve substituir esse valor pelo token de autorização recebido quando a autenticação for concluída.
Há um último passo a ser concluído. 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": "Germany",
"full_name": "Johannes Wagener",
"city": "Berlin"
}
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 demais 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 campo username no JSON deles. Note que omiti o caminho do e-mail: o SoundCloud não fornece e-mail, então o usuário terá que fornecê-lo e verificá-lo ao 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 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".
Sincronização de Grupos e Campos de Usuário
-
oauth2_json_groups_path: Caminho JSON que contém os grupos do usuário como um array de strings. Após o primeiro login do membro, esses grupos estarão disponíveis para seleção na seção ‘grupos associados’ das configurações de grupo do Discourse. Deixe em branco para desativar a sincronização de grupos. -
oauth2_user_field_mappings: Mapeamentos de caminhos JSON que serão armazenados nos Campos de Usuário do Discourse. Os campos de usuário são identificados por seu ID numérico, que pode ser encontrado na URL ao editá-los pelo painel administrativo.
Se você definir
oauth2_json_email_path, o provedor OAuth2 deve confirmar que o usuário é o dono desse endereço de e-mail. Falhar nisso pode resultar em sequestro 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