Pergunta

Eu tenho vários sites (Asp.Net) que eu gostaria de ter um single sign on para ...

Eu gostaria de um usuário a visitar Site1 e ter Site1 contato um centro de single sign-on server (SSS).

O SSS, então, determinar que o usuário não estava conectado (não sei como) e seria redirecionar o usuário para uma tela de logon (ainda no SSS).

Se autenticado, o usuário será redirecionado para Site1.

Site1 trataria esta chegada como nova e provavelmente iria pedir ao SSS se o usuário estivesse conectado. Desta vez, o SSS sugeriria que o usuário em questão estava realmente conectado. E assim Site1 poderia armazenar esse fato nele de sessão para referência futura (talvez com algum tempo de espera adequado)

Site1 conteria um link para Site2 qual o usuário pode optar por seguir.

Chegada ao Site2 devem acionar uma tentativa de Site2 para autenticar o usuário.

Como posso identificar o usuário entrar no Site2 como o mesmo usuário que já visitou Site1 e descobrir que eles já foram autenticados, a fim de que eles não precisam fazer o login em uma segunda vez?

Nota: O SSS tem de ser um sistema privado onde eu controlar a criação da conta. Então, eu tenho medo que eu não pode estar contando com servidores OpenID externos

Update:. Sou incapaz de garantia neste momento que Site1, Site2 e SSS seria dentro do mesmo domínio ... Então eu não faço pensar biscoitos vai cortá-la

Foi útil?

Solução

Não descarte OpenID tão rapidamente - como o proprietário do site, cabe a você escolher qual provedor de OpenID (s) que você escolher para apoio. Você pode optar por executar o seu próprio servidor OpenID e apenas confiar nele.

Além disso, lembre-se que OpenID é um sistema para autenticação. - Como usuário X prova que eles são quem eles dizem que são

Aqui na StackOverflow, eles criam automaticamente as contas quando alguém usa um OpenID para fazer logon - mas você não tem que fazer isso. Você pode ter controle total sobre a criação da conta, com um OpenID associado a cada conta.

Lembre-se também, que (geralmente) qualquer software que você não tem que escrever e manter é uma coisa boa.

Outras dicas

Faça-o da mesma forma todo mundo faz isso, passar em torno de fichas DB-geradas entre os sites com GET ou POST, em seguida, validar essas fichas de volta para um serviço web que fala com o DB diretamente.

Assim o usuário quer no sítio 1 (www.domain1.com). Site 1 cheques de login de domínio local sessão / biscoito, não consegue encontrar nenhum, redireciona o usuário http: / /logindomain.com/?return=www.domain1.com . Se existe um cookie logindomain mais cedo (a partir de sign-ins para sites afiliados), enviá-lo de volta para o site 1. Se não, fazer o que auth utilizador que pretende (cheques Kerberos, formulários auth, openID, etc.) para gerar um token único. Loja que no cookie para logindomain, e redirecioná-los de volta para onde quer "retorno" apontou para, com seu token anexado: http://www.domain1.com/?token=123456 . Uma vez que valida domínio1 o token contra um serviço web (ou o DB sinal diretamente), ele pode definir a sua própria sessão de login local / cookie com as credenciais do usuário.

Então agora você está no local 2 (www.domain2.com) e ir para entrar Você redirecionado para logindomain novamente com o retorno var set, mas ele não pedir-lhe a senha neste momento.? - ele já tem o seu símbolo em seu cookie de SSO. Você começa imediatamente redirecionado para: http://www.domain2.com/?token=123456 (mesma forma como site1 usado). Domain2 valida o token novamente, e deixa-o com nenhuma verificação de senha.

Ele fica um pouco mais complicado se você está mudando o URL de login na mosca ou tentando fazer um AD híbrido / Formulários Auth monstro como I foi encarregado de construir, mas este parece funcionar bem e partidas exatamente (a uma alto nível) que IBM e MS docs dizem que seus sistemas de SSO proprietários fazer.

Você pode tentar usar um servidor de estado de sessão compartilhada.

Você pode usar cookies para armazenar e criar tíquetes de autenticação para os usuários. Nós fizemos isso várias vezes e tem funcionado muito bem.

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