微服务 & SSO & Session & Token(Cook

2020-07-21  本文已影响0人  乌鲁木齐001号程序员

三种架构

前后端半分离架构
前后端半分离架构.png
前后端分离架构
前后端分离架构.png
将 Postman 升级成前端服务器
将 Postman 升级成前端服务器.png

前后端分离架构 | 实现概述

真实坏境下,Web 应用部署在 NodeJS 中,浏览器向 NodeJS 发请求,NodeJS 把请求发到 Zuul,Zuul 中完成限流、认证、审计、授权,完了调用业务系统;

SSO & Authorizatin code grant & 前端服务器

基于 Session 的 SSO

2 个 Session
3 个有效期
优点
缺点
适用

Logout 时同步前端服务器 & 认证服务器的 Session

@Configuration
@EnableWebSecurity // 让安全配置生效
public class OAuth2WebSecurityConfig extends WebSecurityConfigurerAdapter {   

    // ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
        .anyRequest().authenticated()
        .and()
        .formLogin().and() // 这里可以配置自己的登录页
        .httpBasic().and()
        // 自己写的,logout 成功以后的 handler
        .logout().logoutSuccessHandler(logoutSuccessHandler)
        ;
    }

}

重要的事情说三遍

Token 的有效期

Token 是短活的令牌,Token 过期的时候,可能 Session 还没过期。

refresh token
refresh token.png
access_token vs access_token
refresh_token 的启用
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints
            // 这个 userDetailsService 是专门给 refresh_token 用的
            .userDetailsService(userDetailsService)
            .tokenStore(tokenStore())
            // 这个是支持前 4 种认证模式的:password, code, ... , ...
            .authenticationManager(authenticationManager);
}

refresh_token 过期了怎么办

方案一 | 强制 Logout
方案二 | 让认证服务器决定

基于 Token 的 SSO

步骤
基于 Token 的 SSO vs 基于 Session 的 SSO
优点
缺点
上一篇 下一篇

猜你喜欢

热点阅读