Estou construindo uma série de aplicativos da web conectados a um único ponto de autenticação. Basicamente, um usuário tenta acessar um site, se não autenticado, é redirecionado para a página de login do sistema de autenticação central. Após o login, eles são redirecionados para o aplicativo. A partir de então, se eles acessarem qualquer outro aplicativo, eles serão automaticamente conectados.
Alguns detalhes adicionais: 1) todos os aplicativos serão executados no mesmo domínio, para que eu possa usar cookies de domínio, o que facilita as coisas; 2) os usuários podem ter acesso a alguns aplicativos e não a outros, o que precisa ser levado em consideração; 3) o usuário precisa recuperar permissões específicas para cada aplicativo.
Eu implementei algo, mas não estou 100% feliz com isso. No momento, é isso que eu tenho: 1) o aplicativo Web verifica a existência de uma sessão (específica para o aplicativo) e um cookie que é um token JWT enviado pelo sistema de autenticação centralizado; 2) se o cookie não existir, eu redirecionarei para a página de login no sistema de autenticação; 3) após o login, o usuário é redirecionado para o aplicativo que passa em um token JWT; 4) o aplicativo verifica o token por meio de uma chamada da API REST ao sistema de autenticação (fazer com que essas chamadas da API REST se baseiem em um token de acesso separado); se for válido, o token JWT será salvo como um cookie e uma sessão será iniciada. usuário logado; 5) se a sessão do aplicativo expirar, ele verifica se o cookie existe e se o aplicativo faz o mesmo da etapa 4, verifica o token e reinicia a sessão; 6) ao sair, o sistema exclui o cookie, garantir que o usuário esteja desconectado de todos os aplicativos; 7) se o token expirar, o aplicativo usará o token expirado para solicitar um novo, em que a assinatura do token e outras declarações são validadas antes da emissão de uma nova, a única coisa que não é validada é a reivindicação de expiração.
Para esclarecer, a existência de uma sessão específica para o aplicativo é usada para que você não precise continuar fazendo chamadas à API REST constantemente para verificar o token. Mas, como o token foi verificado uma vez, seria seguro usar esse cookie apenas como indicador de que há uma sessão válida?
Uma coisa que não tenho certeza é que meu token precisa ter algo que indique para qual aplicativo ele se destina, pois outras chamadas à API REST podem ser feitas usando o token para obter alguns recursos específicos do aplicativo. Mas se eu obtiver um token para app1 e depois entrar no app2, o app2 dependerá do cookie gerado pelo app2. Parece que eu gostaria de ter dois tokens, um que pode ser armazenado como um cookie de domínio para indicar que o usuário está autenticado e outro que seria realmente específico do aplicativo e pode ser usado para fazer chamadas da API REST para outros aplicativos, recursos específicos.
Estou complicando demais isso ou minha linha de pensamento corresponde ao que os outros estão vendo / fazendo por aí? Ou existe uma maneira mais elegante de fazer isso? Pensei em implementar algo como Open ID, mas parece um exagero para nossas necessidades. Quero que isso seja o mais simples possível, para que eu possa documentar o processo e outras equipes de desenvolvedores possam desenvolver aplicativos que se conectem ao sistema de autenticação sem precisar de muita assistência.
fonte