SSO com TownNews CMS

Alguém configurou SSO para um site do Townnews?

Não tenho conhecimento de nenhum site que utilize o Townnews ou o BLOX CMS com o SSO do Discourse. Você sabe se é possível adicionar código a um site que usa esse serviço? Se o código do SSO do Discourse puder ser adicionado ao site, talvez seja possível usá-lo como provedor de SSO para o Discourse.

Desculpe, sou iniciante, mas o que quis dizer foi usar o TownNews como fonte de SSO. Que código eu precisaria adicionar ao site?

Isso significa que o Townnews seria o provedor de SSO para o seu site Discourse. Para usar a implementação de SSO do Discourse, você precisa ter a capacidade de adicionar código ao serviço que atua como provedor de SSO. Esse código precisa se integrar ao processo de login do serviço. Você pode encontrar detalhes sobre o código que precisa ser adicionado aqui: Single-Sign-On Oficial para o Discourse (sso).

Para um exemplo de código funcional, veja como nosso plugin do WordPress implementa o SSO: wp-discourse/lib/sso-provider at main · discourse/wp-discourse · GitHub.

Também pode ser possível fazer o login de usuários no Discourse por meio do Townnews usando OAuth2. Isso seria possível se o Townnews puder atuar como um provedor OAuth2. Há detalhes sobre a configuração de logins com OAuth2 no Discourse aqui: Suporte Básico a OAuth2. Antes de gastar muito tempo com isso, seria bom confirmar se o Townnews pode funcionar como um provedor OAuth2. Deve ser possível descobrir isso na documentação deles.

Estou tentando resolver uma questão com meu provedor de site, mas achei que valeria a pena compartilhar isso com você para ver se há informações que possam me ajudar. Agradeço por dedicar seu tempo.


Redirecionamento para o endpoint do provedor

Todo site BLOX-CMS possui um endpoint de autenticação federada disponível na mesma URL reservada:

https://www.example.com/tncms/auth/federated/

O site consumidor inicia a autenticação redirecionando o navegador do usuário para essa URL. O endpoint exige um parâmetro return, que deve ser definido como a URL do endpoint do site consumidor.

Exemplo de URL:

https://www.example.com/tncms/auth/federated/?return=http://vendor.com/login/

O endpoint também aceita parâmetros adicionais:

  • source: Este parâmetro e seu valor serão passados para a URL de login do site caso seja necessária a autenticação do usuário. Os modelos podem reagir a esse valor para personalizar a interface do formulário de login. O padrão é o valor ‘federated’ se não for especificado.

  • reauth: Defina como um valor verdadeiro para forçar a exibição da página de login, independentemente do estado atual de login do usuário.

Redirecionamento para o endpoint do consumidor

A URL do endpoint do site consumidor é fornecida ao provedor no parâmetro return quando o usuário é inicialmente redirecionado para o endpoint do provedor. Após a autenticação bem-sucedida no site do provedor, o usuário será redirecionado para essa URL juntamente com um parâmetro code. O valor de code deve ser trocado pelos detalhes da conta do usuário em uma chamada subsequente imediata ao serviço web, conforme descrito abaixo.

A URL do endpoint do consumidor pode conter seus próprios parâmetros de consulta. O parâmetro code será mesclado a eles sem sobrescrever os outros valores.

É possível, dependendo de como os modelos do site do provedor foram escritos, que o usuário chegue ao endpoint do consumidor sem um valor para code. Nesse caso, o usuário deve ser tratado como se tivesse optado por cancelar o processo de autenticação.

Exemplo de resposta após login bem-sucedido (com base no exemplo anterior):

http://vendor.com/login/?code={code}

Onde {code} é um identificador único para uso no serviço web subsequente.

Chamada subsequente ao serviço web

Quando o usuário chegar ao endpoint do consumidor com um código válido, o site consumidor deve emitir imediatamente uma chamada ao serviço web no site do provedor para trocá-lo pelas informações da conta do usuário.

O site consumidor acessará a ação get do módulo de usuário, passando o parâmetro code fornecido pelo provedor:

https://www.example.com/tncms/webservice/v1/user/get/?code={code}

A resposta será um objeto de dados da conta do usuário, conforme descrito na documentação dos serviços web. Em caso de código inválido, será retornada uma resposta nula.

Um código só pode ser usado uma vez. Após ser utilizado para recuperar uma conta de usuário, ele é imediatamente invalidado, e futuras solicitações com ele retornarão respostas nulas.

Isso parece promissor: https://help.bloxcms.com/knowledge-base/applications/settings/users/authentication_provider/article_fa0ce6ec-9824-11e4-b296-23bd78ef308a.html:

A opção Provedor de Autenticação permite que seu site atue como um Provedor de Autenticação OpenID. Isso significa que os usuários do seu site podem usar suas credenciais para fazer login em outros sites que permitam isso. Outros sites BLOX CMS podem atuar como sites clientes, permitindo essa troca de credenciais de login.

Deve ser possível configurar um site BLOX CMS para funcionar como o provedor de autenticação OpenID para o Discourse. Se for o caso, isso significaria que os usuários poderiam fazer login no seu fórum Discourse por meio do seu site TownNews. Para configurar isso, você precisará instalar o Discourse OpenID Connect (OIDC) no seu site Discourse. A configuração pode envolver alguns testes e ajustes. Avise-nos se tiver dificuldades e tentaremos ajudar.