Disparar autenticação automática via SSO ao vincular a tópicos privados?

Estamos utilizando nossa própria aplicação como provedor de SSO para o Discourse e enfrentamos um problema ao vincular usuários a tópicos privados em nosso fórum Discourse a partir da nossa aplicação: a autenticação só é acionada ao clicar no botão “Login”.

  • Usamos nosso próprio sistema como provedor de SSO para o Discourse.
  • Temos uma mistura de páginas públicas e privadas no Discourse, então não configuramos o login_required.
  • Se um usuário se autentica em nosso sistema e é redirecionado para a URL raiz do Discourse, ele vê as categorias públicas, mas não está logado.
  • Se um usuário se autentica em nosso sistema e é redirecionado para a URL do Discourse + /login, ele é logado corretamente e redirecionado para a URL raiz do Discourse.
  • Se um usuário se autentica em nosso sistema e é redirecionado para a URL de uma categoria ou tópico privado no Discourse, ele vê uma página pedindo para fazer login. Se clicar em “Login”, é automaticamente logado e visualiza a categoria/tópico.

Esse último caso é o problemático. Acredito que uma das seguintes soluções seria adequada:

  • Poderíamos vincular a ourdiscourse.com/c/some-category?login=true e uma verificação de autenticação seria realizada: se o usuário estiver logado, o tópico é exibido; caso contrário, ele é enviado ao nosso provedor de SSO e redirecionado de volta ao tópico após o login.
  • Poderíamos vincular a ourdiscourse.com/login?redirect=c/some-category e uma verificação de autenticação seria realizada: se bem-sucedida, redireciona para a página indicada na string de consulta; se não, redireciona para o provedor de SSO e, após a autenticação bem-sucedida, redireciona de volta para a página na string de consulta.
  • Poderíamos vincular diretamente a ourdiscourse.com/c/some-category, e, se for uma página privada, o Discourse realizaria uma verificação de autenticação: se bem-sucedida, leva à categoria; se não, redireciona para o provedor de SSO e, em seguida, de volta à página.

Obrigado!

(Já havia postado a questão aqui — peço desculpas pelas múltiplas postagens, mas pensei que talvez um novo tópico pudesse gerar mais respostas).

You can create an login link on your SSO provider site with a return_path parameter in the URL. After authentication, Discourse will redirect the user to the value set for the return_path. The link should be in this form:

<a href="https://forum.example.com/session/sso?return_path=https://forum.example.com/your-discourse-endpoint">Link Text</a>
5 curtidas

Can’t they also have the SSO do something similar so that when they log in to the SSO they are also logged in to Discourse?

The only ways I know of auto logging in users to Discourse when the login to the SSO provider site seem a little hacky. With the use of SSO login links in the form I gave above and the sync_sso route for updating users without requiring them to login, I can’t see where it would be required.

1 curtida

Thank you - this has worked perfectly.

I’m not sure if we are doing this - what would be the way to check?

EDIT: should have searched first… details here: Sync DiscourseConnect user data with the sync_sso route

3 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.