Single sign-on princípio e implementação simples

Um mecanismo de login único sistema

1, protocolo sem estado http

uma aplicação web usando a arquitetura navegador / servidor, http como protocolo de comunicação. Nenhuma conexão entre em http é um protocolo sem estado, cada vez que o pedido do navegador, o servidor irá processar independentemente do pedido antes ou depois de não associar este processo é descrito pela FIG seguinte três vezes pedido / resposta

Mas isso também significa que quaisquer recursos do servidor de acesso do usuário pode através de um navegador, se você quiser proteger alguns dos recursos do servidor, deve ser limitado às solicitações do navegador; limitar a solicitação do navegador, o pedido deve identificar o navegador em resposta a pedidos legítimos, ignorado solicitação ilegal; identificar as solicitações do navegador, solicitações do navegador deve indicar claramente. Uma vez que o protocolo sem estado http, vamos servidores e navegadores possuem em conjunto uma barra de status! Isso é mecanismo de sessão

2, o mecanismo de sessão

O primeiro pedido do browser que o servidor, o servidor cria uma sessão, o ID de sessão e parte de transmissão como uma resposta para o navegador, o navegador armazena o ID da sessão, uma sessão ID e trazer no segundo seguinte e solicitações de terceiros, solicitação de sessão aquisição servidor ID de saber que o usuário não é o mesmo, este processo é descrito pelos seguintes FIGS., é gerado o pedido subsequente com o primeiro pedido de associação

Servidor salva o objeto de sessão na memória, o navegador como salvar o ID da sessão é? Você pode pensar de duas maneiras

  • parâmetro de solicitação
  • biscoito
  • ID de sessão como um parâmetro de cada solicitação, o servidor recebe um parâmetro de um pedido de resolução pode, naturalmente, obter o ID de sessão, e, assim, determina se a partir da mesma sessão, é claro que esta abordagem não é confiável. Em seguida, o navegador para manter a sua própria sessão id-lo, o navegador envia automaticamente um ID de sessão cada vez que você enviar http mecanismo de pedido, biscoito apenas para fazê-lo. Um cookie é uma pequena quantidade do navegador para o mecanismo de armazenamento de dados, a automática que acompanha dados do cookie informações "key / value" é armazenado, o navegador envia uma solicitação http

    tomcat sessão do curso para alcançar o mecanismo de cookie, o acesso tomcat do servidor, o navegador pode ver um cookie chamado "JSESSIONID", que é o mecanismo para manter tomcat id de sessão sessão, use um processo de resposta a pedido cookie é mostrado abaixo

    3, o estado de login

    Com o mecanismo de sessão, registrada suficiente para entender, vamos supor que a primeira vez que o navegador solicita o servidor terá de inserir um nome de usuário e senha para verificar a identidade do servidor para obter o nome de usuário e senha para o banco de dados do que a direita, descreve corretamente os actuais titulares da sessão o usuário é um usuário legítimo, a sessão deve ser marcado como "autorizado" ou "registrado em" afins do estado, uma vez que é o estado da sessão, naturalmente você deseja salvar no objeto sessão, tomcat definir as seguintes registrado no objeto de sessão

    HttpSession sessão = request.getSession (); session.setAttribute ( "isLogin", true);

    Quando um usuário acessa novamente, vista tomcat registrado no objeto de sessão

    HttpSession sessão = request.getSession (); session.getAttribute ( "isLogin");

    navegador alcançado solicita o modelo de servidor de estado de login, como descrito com FIG.

    verificações de estado cada solicitação de login objeto de sessão recurso protegido, a sessão só pode isLogin = true mecanismo de acesso de login assim alcançada.

    Em segundo lugar, a complexidade do sistema multi-

    sistema web passou do antigo sistema agora desenvolvido em uma única aplicação a partir do grupo consistindo de multi-sistema, em face de tantos sistemas, um usuário Você quer um login, e depois de fazer logoff um por um? A figura seguinte mostra como

    sistema de desenvolvimento de web a partir de um único sistema para um sistema multi-aplicação consistindo do grupo, devem ser suportadas pela complexidade do sistema interno, em vez do utilizador. Não importa o quão complexo sistema de web interno, para os usuários, é A, ou seja, toda a usuários do sistema todo unificado para acessar aplicativos web com acesso a um único sistemas de grupo, login / logout apenas uma vez é suficiente

    Embora o single sign-on sistema de solução é perfeita, mas para o grupo de aplicações multi-sistema não é mais aplicável, e por quê?

    O sign-on solução que biscoito, biscoito carregando o id de sessão para manter o estado da sessão entre o navegador eo servidor de núcleo único sistema. Mas cookie é limitado, esta limitação é o domínio cookie (normalmente corresponde nome de domínio do local), ele será automaticamente carregar o domínio corresponde ao cookie quando o navegador envia http pedido, mas não todos de cookie

    Se assim for, por que não o grupo de domínio de aplicações web todos os subsistemas unificadas sob um domínio de nível superior, como "* .baidu.com", então o seu domínio de cookie é definido como "baidu.com", esta teoria prática é possível, mesmo muito mais cedo sobre o uso de tais cookies de login do sistema a compartilhar com o seu nome de domínio.

    No entanto, viável faz o bem não significa, existem muitas limitações para maneira bolinho ação. Em primeiro lugar, o nome do domínio grupo de aplicação era a unidade, em segundo lugar, o grupo de aplicação dos sistemas utilizados pela tecnologia (ou pelo menos um servidor web) para ser o mesmo, caso contrário, o valor da chave cookie (tomcat é JSESSIONID) diferente, incapaz de manter a sessão, compartilhando o cookie caminho não pode ser alcançado através entre tecnologia sessão idioma plataforma, como Java, PHP, sistema de .net, em terceiro lugar, biscoito em si não é seguro.

    Portanto, precisamos de uma nova maneira de implementar o login log em multi-sistema de grupos aplicações, que é o single sign-on

    Em terceiro lugar, o single sign-on

    O que é o single sign-on? Single sign significa Single Sign On (doravante SSO), refere-se a um sistema de login do sistema em um grupo multi-aplicação, você pode obter licença em todos os outros sistemas sem ter que logar novamente, incluindo single sign-on e único Sair duas partes

    1. Log

    Comparado com um único login do sistema, sso necessidade de um centro de certificação independente, centro de certificação só pode aceitar nome de usuário e senha e outras informações de segurança do usuário, outros sistemas não fornecem uma entrada de log, aceita centros de certificação apenas indiretamente autorizados. Conseguida através de token de autorização indireta, sso verifica centro de autenticação de nome e senha do usuário não tem problema, criar uma autorização forma, no decorrer do próximo salto, a autorização token é enviado para cada subsistema como um argumento para obter o subsistema de token que foi autorizada a tomar para criar uma sessão local, o mesmo login sessão de login com um sistema único local. O princípio do presente processo, que é o único sinal-ligado, com a figura que se segue ilustra

    Em seguida, a descrição breve da Fig.

  • O acesso do usuário ao sistema de recursos protegidos 1, o usuário encontrou sistema 1 não está logado, ir para sso Centro de Certificação, e como um endereço próprio argumento
  • sso Centro de Certificação descobre que o usuário não está logado, irá orientar o usuário para a página de login
  • Usuário do aplicativo nome de registro senha enviada
  • sso verificação centro de autenticação de informações do usuário, o usuário cria uma sessão entre o centro da autenticação e da sso, chamado de autorização da sessão mundial token de ao criar
  • sso centro de autenticação token com o pedido inicial saltará endereço (sistema 1)
  • O sistema se token para o centro de autenticação verificação sso token é válido
  • sso verificação centro token de autenticação retorna um sistema de registo válida 1
  • O sistema utiliza o token para criar uma sessão com um usuário, ele referida como sessão local e regresso a recursos protegidos
  • O acesso do usuário aos recursos do sistema protegido 2
  • 2 descobriram que o usuário do sistema não está logado, ir para sso Certification Center, e como um endereço próprio argumento
  • sso achados Certification Center que o usuário está logado, saltar de volta para o endereço do sistema 2, juntamente com o token
  • 2 sistema para obter o token, o centro de autenticação para verificar sso token é válido
  • sso verificação centro token de autenticação retorna um sistema de registo válida 2
  • 2 sistema usa o token para criar uma sessão do usuário local com o retorno de recursos protegidos
  • Depois do usuário efetuar login com sucesso, vai estabelecer um centro de certificação e sessões de cada subsistema sso, usuários e centro de autenticação sso sessão estabelecida chamada sessão global, de usuário e de cada subsistema para estabelecer uma sessão chamada sessão local, após a sessão local é estabelecida, o acesso do usuário recursos subsistema deixarão de ser protegido por sso certificação Center, a sessão global com a sessão local as seguintes restrições

  • Existe sessão local, deve haver uma sessão mundial
  • Existe sessão Global, a sessão local não existe necessariamente
  • sessão mundial destruiu a sessão local deve ser destruído
  • Você pode blog Park, Baidu, CSDN, Taobao e outros sites do processo de login para aprofundar a compreensão do single sign-on, observar e processo de registo parâmetro salto url

    2, write-off

    Single Sign, naturalmente, têm um único ponto de cancelamento, o cancelamento em um subsistema, a sessão de todos os subsistemas serão destruídas, com o seguinte diagrama para ilustrar

    assim Certification Center foi ouvir o estado da sessão global, uma vez que a destruição sessão global para notificar todos os ouvintes registrados irá realizar o logout do sistema

    A seguinte descrição breve da Fig.

  • Usuário inicia um pedido de logout para o sistema 1
  • O sistema 1 de acordo com um token de sessão para obter o ID de usuário do sistema 1 Estabelecido iniciado pedido de-inscrição para o sso centro de autenticação
  • sso verificação centro de autenticação token é válido, a destruição da sessão global, ao retirar todo o uso do cadastro de endereços do sistema de token
  • sso Certificação Centro iniciado pedido do registo de que todo o sistema registrada
  • Cada sistema recebe pedido de cancelamento de registro sso Certification Center, a destruição da sessão local
  • sso Centro de Certificação para orientar o usuário para a página de login
  • Em quarto lugar, o diagrama de implantação

    Relaciona-se com um single sign-on com o subsistema do centro de autenticação pública sso, que precisam se comunicar com o centro de autenticação para sso token de câmbio, e do pedido de verificação de token para iniciar o cancelamento, integrado subsistema deve, portanto, sso cliente, o centro de autenticação é sso sso servidor, todo o sign-on único processo cliente e do lado do servidor de comunicação processo essência sso, pela seguinte descrição da FIG.

    sso sso Centro de Certificação eo cliente tem uma variedade de métodos de comunicação, aqui em um fácil simples de usar httpclient por exemplo, serviço web, rpc, repousante API pode

    Em quinto lugar, alcançar

    Apenas brevemente em processo de implementação baseada em java, e não fornece um código-fonte completo, compreender o princípio, eu acredito que você pode conseguir o seu próprio. sso arquitetura cliente / servidor, olhamos para a função sso-cliente e sso-servidor a ser alcançado (abaixo: sso Certificação Centro = sso-servidor)

    sso-cliente

  • solicitação de usuário não registrado Intercepção subsistema para saltar para a sso centro de autenticação
  • Recebe e armazena o centro token de autenticação transmite o sso
  • comunicação eficácia e sso-servidor, a verificação de token
  • Estabelecer uma sessão local
  • Intercept solicitação do usuário logout, envie um pedido de cancelamento para o sso centro de certificação
  • Sso centro de autenticação recebe o pedido de logout é emitido, a destruição de sessão local
  • sso-servidor

  • Verificar as informações de login do usuário
  • Criar uma conversa global
  • Criando um token de autorização
  • comunicação sso-cliente e enviar um sinal
  • Sso-cliente verificar a validade do token
  • Registro do sistema
  • Sso-cliente recebe a solicitação de cancelamento, logout todas as sessões
  • Em seguida, seguimos o princípio de passo a passo para alcançar sso-lo!

    1, sso-cliente interceptar pedidos não registrada

    Java maneira de pedidos de interceptação tem servlet, filtro, ouvinte três maneiras, usamos o filtro. LoginFilter.java nova classe sso-cliente e interface de filtro implementado, o usuário não está conectado ao interceptar adicionado na doFilter () Método

    doFilter public void (ServletRequest pedido, a resposta ServletResponse, FilterChain cadeia) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) pedido; HttpServletResponse res = (HttpServletResponse) resposta; HttpSession sessão = req.getSession (); if (session.getAttribute ( "isLogin")) { chain.doFilter (pedido, resposta); retornar; } // salto para sso Centro de Certificação res.sendRedirect ( "sso-server-url-com-system-url"); }

    2, sso-servidor interceptar pedidos não registrada

    Intercepção salto de sso-cliente para solicitação sso não registrado Certification Center, salto para a página de login, o processo é exatamente o mesmo com o sso-cliente

    3, sso-servidor verificar as informações de login de usuário

    Digite o nome de usuário e senha na página de login do usuário solicitando login, sso autenticação do usuário informações de verificação centro, a verificação for bem sucedida, o estado da sessão marcada como "login"

    @RequestMapping ( "/ login") public String de login (String nome de usuário, senha String, HttpServletRequest req) { this.checkLoginInfo (username, password); . Req.getSession () setAttribute ( "isLogin", true); retornar "sucesso"; }

    4, sso-servidor token de autorização é criado

    Autorização token é uma sequência de caracteres aleatórios, de que forma não importa verde Chengdu, eles não repetir, pode ser difícil de forja, o seguinte é um exemplo

    Cadeia do token = UUID.randomUUID toString () () .;

    5, sso-cliente token e obtenção de verificação

    sso login de autenticação centro, salta para trás e anexar subsistemas subsistema de token (sso-cliente) obter o token, em seguida, ir verificar sso Centro de Certificação, acrescentou, em doFilter LoginFilter.java de () em algumas linhas

    // pedido vem parâmetro de token Cadeia do token = req.getParameter ( "token"); if (simbólico! = null) { // seleção para sso centro token de autenticação boolean verifyResult = this.verify ( "sso-server-verificar-url", token); if (! verifyResult) { res.sendRedirect ( "sso-server-url"); retornar; } chain.doFilter (pedido, resposta); }

    verificar () método usando httpclient alcançado aqui apenas uma introdução breve, httpclient uso detalhadas, por favor consulte a documentação oficial

    HttpPost HttpPost = new HttpPost ( "sso-server-verificar-url-com-token"); HttpResponse` HTTPResponse = httpClient.execute (HttpPost);

    6, sso-servidor recebe e processa o pedido de verificação de token

    centro de autenticação do usuário após um login bem-sucedido sso, sso-servidor de autorização token é criado e armazenado no, então, sso-servidor token de verificação de token é encontrar o token existe e expirou, a verificação token é bem sucedida após sso-servidor sistema transmite o pedido de verificação de registrar centro de autenticação SSO (significado é armazenado)

    endereço sistema símbolo de chave-valor registado é tipicamente armazenada numa base de dados (por exemplo Redis) em, pode ser proporcionado que é redis período de tempo eficaz para a chave token. Redis em execução na memória, muito rápido, apenas sso-servidor não requer qualquer persistência de dados.

    sistema de registo token pode abordar as Redis, você pode perguntar, por que deveria abordar estes sistemas de armazenamento com armazenamento sob a estrutura quadro descrito? Se não for armazenado, write-off quando estão em dificuldades, os submete usuário a solicitação de cancelamento para o sso centro de certificação, sso Centro de Certificação Sair sessão global, mas não sabem o que este sistema com sessão global de criar a sua própria sessão local, que criança não quer saber sistema de pedido de logout transmite o logout sessão local

    7, sso-cliente de verificação token de sessão local é criada com sucesso

    Após a verificação token é bem sucedido, sso-cliente atual sessão local marcado como "login", modificar LoginFilter.java, adicionar algumas linhas

    if (verifyResult) { session.setAttribute ( "isLogin", true); }

    sso-cliente precisa o token e a corrente de ligação indicando o estado de login da sessão associado com o token de ID de sessão, essa relação pode ser salvo hashmap java, e para o processamento dos dados armazenados no centro de autenticação sso solicitação de logoff enviado por

    8, o processo de fim de sessão

    O usuário envia uma solicitação para o subsistema com o parâmetro "logout" (solicitação de exclusão), sso-cliente intercepta interceptores o pedido, pedido de logout para iniciar a autenticação sso centro

    Corda Sair = req.getParameter ( "Sair"); if (Sair! = null) { this.ssoServer.logout (token); }

    sso centro de autenticação também identificou no pedido para o cliente sso da mesma forma é um pedido de cancelamento de registro (com o parâmetro "logout"), uma sessão de logout sso mundial centro de autenticação

    @RequestMapping ( "Sair /") public String logout (HttpServletRequest req) { HttpSession sessão = req.getSession (); if (sessão! = null) { session.invalidate (); // LogoutListener gatilho } retornar "redirecionamento: /"; }

    sso Centro de Certificação tem um ouvinte sessão global, uma vez que a sessão global de logoff, faça logoff o sistema irá notificar todas nominativas

    classe pública LogoutListener implementos HttpSessionListener { @Override public void sessionCreated (HttpSessionEvent event) {} @Override public void sessionDestroyed (HttpSessionEvent event) { // envia uma solicitação de cancelamento de todo o sistema registrada por httpclient } }
    "Antidrogas 2: World confronto" vencedor Two, o candidato do declínio dos filmes de Hong Kong
    Anterior
    25 anos depois, ninguém artes marciais lutar melhor do que Jet Li
    Próximo

    Javafx-plus