暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mybatis-plus团队又一神器kisso,SSO妥了

全栈进阶那些事 2021-11-23
2162

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的。

https://baike.baidu.com/item/SSO/3451380?fr=aladdin


小编是mybatis-plus的深度用户,苞米豆团队开源的项目小编在实际上模中也有应用,今天为大家推荐的是SSO的解决方案:kisso。



kisso = cookie sso 基于 Cookie SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。

01

使用文档

// 生成 jwt 票据,访问请求头设置‘ accessToken=票据内容 ’ 适合前后分离模式单点登录
String jwtToken = SSOToken.create().setId(1).setIssuer("admin").setOrigin(TokenOrigin.HTML5).getToken();


// 解析票据
SSOToken ssoToken = SSOToken.parser(jwtToken);


// Cookie 模式设置
SSOHelper.setCookie(request, response, new SSOToken().setId(String.valueOf(1)).setIssuer("admin"));


// 登录权限拦截器类 SSOSpringInterceptor
// 注解不拦截 @LoginIgnore
// yml 配置 kisso.config....


  • springboot

@ControllerAdvice
@Configuration
public class WebConfig extends WebServiceConfigurer {


@Override
public void addInterceptors(InterceptorRegistry registry) {
// SSO 授权拦截器
SSOSpringInterceptor ssoInterceptor = new SSOSpringInterceptor();
ssoInterceptor.setHandlerInterceptor(new LoginHandlerInterceptor());
registry.addInterceptor(ssoInterceptor).addPathPatterns("/**").excludePathPatterns("/v1/sso/**");
}
}


02

仓库


<dependency>
<groupId>com.baomidou</groupId>
<artifactId>kisso</artifactId>
<version>3.8.1</version>
</dependency>

03

算法配置


  • 默认 HS512 算法

// HS512 密钥,配置参数 kisso.config.sign-key
SSOHelper.getHS512SecretKey()

  • 切换 RS512 算法

1,配置算法 kisso.config.sign-algorithm = RS512
2,配置私钥公钥证书,默认放置 resources 目录即可


// RSA 密钥,配置参数 kisso.config.rsa-jks-store
// 其它参数 CN=Server,OU=Unit,O=Organization,L=City,S=State,C=US
// RSA 生成 jks 密钥
$ keytool -genkeypair -alias jwtkey -keyalg RSA -dname "CN=llt" -keypass keypassword -keystore key.jks -storepass jkspassword


// RSA 生成证书
// RSA 公钥,配置参数 kisso.config.rsa-cert-store
$ keytool -export -alias jwtkey -file public.cert -keystore key.jks -storepass jkspassword

04

SameSite


Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,主要用于防止CSRF攻击和用户追踪。

SameSite属性可以让 Cookie 在跨站请求时不会被发送,从而阻止了跨站请求伪造攻击(CSRF)。它有三个属性值


  1. Strict完全禁止第三方Cookie,跨站点时,任何情况下都不会发送 Cookie。

  2. Lax 允许部分第三方请求携带 Cookie。

  3. None 无论是否跨站都会发送 Cookie。


Chrome的SameSite默认值是Lax,而Safari的默认值是Strict。
大部分的Cookie都是浏览器的默认值Lax,当然还有 Strict这种严格禁用第三方Cookie发送的,还有个None,即无论是否跨站都会发送该Cookie。
以前呢,SameSite的默认值是None, 即当前页面嵌入其他第三方页面(iframe)、POST请求、Ajax都可以携带第三方的Cookie。但是默认值调整了之后,会产生一些影响,我们先来看看默认值改变之后,Cookie的发送情况。


温馨提示

私信回复 “kisso” 获取源码及相关信息。您的支持和鼓励是我们最大的动力。喜欢就请关注我们吧~




扫描二维码

关注我们

了解更多全栈技能




文章转载自全栈进阶那些事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论