Pergunta

O que é a melhor solução para implementar single sign on em um aplicativo .net? Eu pesquisei e encontrei algumas soluções, mas não estou muito convencido com essas soluções.

usuário fizer logon website1 e então se move para website2. Como website2 saberá usuário logado? Eu acho que passando alguns token no url que será verificado por website2 no banco de dados de validade. Isso significa que eu preciso marshall todos os URLs em website1 que leva a website2?

Em segundo lugar se o usuário continuar a navegar website2 para dizer 1 hora e depois passar para website1. Por essa sessão tempo website1 expirou assim que o usuário verá uma página de login, não é? Mas este comportamento é errado de acordo com single sign on funcionalidade.

Foi útil?

Solução

Eu acho que você está mal-entendido como single sign-on obras.

Vamos considerar website1 e website2 que querem usar a conexão única.

Um site de início de sessão é criado no identityProvider. Este é o único lugar onde uma tela de logon aparece.

Quando o usuário visita website1 e escolhem o login website1 envia o usuário para a tela de logon no identityProvider. O usuário fizer logon identityProvider que cai o seu próprio cookie de login para seu domínio (e, talvez, permite que o usuário salve suas informações de autenticação para que eles nunca for solicitado novamente). Em seguida, ele redireciona o navegador para voltar website1 incluindo um token no pedido que rachaduras website1 abrir, recebe informações de identidade de e executa é próprios pedaços de login (queda é cookie de autenticação própria que dura no entanto, ele quer).

Em seguida, o usuário visita website2 e seleciona logon. Website2 salta ao usuário identityProvider, que já sabe quem é o usuário e, se usuário escolheu para salvar suas informações de login, autentica silenciosamente e, em seguida, redireciona para website2 com outro sinal que Website2 rachaduras abrir e, em seguida, executa seus próprios pedaços de login.

Há um monte de segurança em torno dele, limitando tokens para sites específicos, permitindo apenas tokens para ser enviado para sites na lista de autorizações etc etc.

Assim, para resolver suas preocupações

  1. usuário fizer logon website1 e então se move para website2. Como website2 saberá usuário logado? Isso não acontece. website2 deve solicitar informações de autenticação a partir do local de conexão única em primeiro lugar.
  2. isso significa que eu preciso marshall todos os URLs em website1 que leva a website2? Não, a menos que você faça website1 o provedor de identidade também. Mesmo então, que seria doloroso, melhor ter volta redirecionamento website2 ao identityprovider se um token é necessário.
  3. Em segundo lugar se o usuário continuar a navegar website2 para dizer 1 hora e depois passar para website1. Por essa sessão tempo website1 expirou assim que o usuário verá uma página de login, não é? -. Depende de como você configura website1, e quanto tempo do cookie de autenticação dura
  4. Mas este comportamento é errado de acordo com single sign on funcionalidade. Não, não é. Signon único não significa que você obter um token flutuante que é compartilhado entre sites. Cada site que usa o single sign-on ainda cria seu próprio cookie de autenticação. O que pode acontecer é se o usuário vai voltar para WebSite1 ele detecta um cookie de autenticação expirou, em seguida, envia o usuário off para a página de início de sessão única vez em que eles estão autenticado (silenciosamente) e um novo token é adiado para website1 que cria um novo cookie de autenticação por si.

Outras dicas

A abordagem oficial da Microsoft é através de Serviços de Federação do Active Directory (que envolve SAML com autenticação AD). Isto tem as características que você está procurando -. Mas é talvez demasiado pesado para uma aplicação web pública

Eu estou supondo que você não quer usar a autenticação do Windows com Active Directory, etc. Um método é a entregar a partir de uma sessão autenticada para o outro usando um token de segurança na cadeia de consulta, como você descreve.

Ambos os aplicativos usam a mesma chave de criptografia pública para codificar / decodificar o token de segurança. Como você disse, esta multa funciona se você tiver limitado, links de transição predefinidos entre os sites, mas se você quiser ser capaz de usar todas as ligações de página entre os aplicativos que você precisa para gerar os URLs em tempo real para que eles contêm o token.

A maneira como você lida com limites de tempo é que o token de segurança também contém um tempo de expiração. Você gerar um novo token de segurança cada solicitação de página, ou quando você criar uma nova ligação entre apps.

Normalmente o token de segurança contém um ID do usuário e um tempo limite eo verificador de login quer retorna o ID de usuário ou nulo se o tempo limite expirou.

Não é uma solução rápida para o código corretamente e com segurança. Talvez você possa encontrar um pré-construído em projeto de código?

Você pode usar o mecanismo de SSO diferente para diferentes aplicações com base na sua aplicação.

No entanto, eu podia ver " Out-of-box SSO " serviço da Vivo, Google, Yahoo, Facebook etc. para fornecer autenticação, apoiando SAML. Isso nos ajudará a se livrar dos problemas mantendo nossa própria implementação do serviço SSO.

Se você precisa de uma compreensão básica como o trabalho SSO, você pode consultar aqui

MS fez um papel nele dentro da empresa há alguns anos atrás - nós set-up as amostras, mas nunca implementado de verdade - Single Sign-on

Confira neste link com o uso de provedores de OAuth e Sociais, que oferece uma infinidade de recursos de autenticação já cozido em .Net vídeo de treinamento Microsoft em OAuth e logon único com provedores sociais

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top