JustAuthPlus - 模块化的开源登录认证中间件

对于任何有一定规模的系统而言,登录认证系统都是不可或缺的 。登录认证实现方式众多,包括账密、社会化登录、OAuth2、LDAP 等,且各系统的登录认证往往功能重复 。JustAuthPlus(JAP),就是一套灵活泛用的登录认证中间件 。

JustAuthPlus - 模块化的开源登录认证中间件

文章插图
 
简介JustAuthPlus(简称 JAP),是 fujieid 在Gitee上开源的登录认证中间件,仓库位于
https://gitee.com/fujieid/jap,目前版本为 v1.0.7 。
JAP 基于模块化设计,为所有需要登录认证的 WEB 应用提供一套标准的技术解决方案,开发者可以基于 JAP 适配绝大多数的 WEB 系统(自有系统、联邦协议),简单方便 。
JustAuthPlus - 模块化的开源登录认证中间件

文章插图
 
 
使用JAP 简单易用,具有以下特性:
  • 易用性:JAP 的 API 沿袭 JustAuth 的简单性,做到了开箱即用的程度 。JAP 高度抽象各种登录场景,提供了多套简单使用的 API,极大程度的降低了开发者的学习成本和使用成本
  • 全面性:JAP 全量适配 JustAuth 支持的第三方平台,实现第三方登录 。同时也支持所有基于标准OAuth2.0 协议或者 OIDC 协议或者 SAML 协议的应用、系统,同时 JAP 还提供不同语言版本的项目 SDK,适配多种研发场景
  • 模块化:JAP 基于模块化设计开发,针对每一种登录场景,比如账号密码、OAuth、OIDC等,都单独提供了独有的模块化解决方案
  • 标准化:JAP 和业务完全解耦,将登录认证相关的逻辑抽象出一套标准的技术解决方案,针对每一种业务场景,比如用户登录、验证密码、创建并绑定第三方系统的账号等,都提供了一套标准的策略或者接口,开发者可以基于 JAP,灵活并方便的完成相关业务逻辑的开发和适配
  • 通用性:JAP 不仅可以用到第三方登录、OAuth授权、OIDC认证等业务场景,还能适配开发者现有的业务系统的普通账号密码的登录场景,基本将所有登录相关的业务场景都已经涵盖 。针对 WEB 应用,JAP 将提供满足各种不同登录场景的解决方案(和开发语言无关)
JAP功能丰富,包括:
JustAuthPlus - 模块化的开源登录认证中间件

文章插图
 
JAP 适用于所有需要登录功能的场景 。比如:
  • 标准规范:新项目立项,你们需要研发一套包含登录、认证的系统,并且需要一套标准的、灵活的、功能全面的登录认证功能 。
  • 需求灵活:现有登录模块为自研,但是新一轮的技术规划中,你们想将登录认证模块重构,以更加灵活的架构适应后面的新需求,比如:集成 MFA 登录、集成 OAuth 登录、SAML登录等 。
  • 力求省事:你们的项目太多(或者是开发语言较多,比如:JAVA、Python、Node 等),每个项目都需要登录认证模块,想解决这种重复劳动的问题,使研发人员有更多的时间和精力投入到业务开发中,提高研发产能和研发效率 。
  • ...
JAP使用模块化设计,分别提供不同功能 。
jap-simple 是为了方便快速的集成本地账号密码登录而添加的增强包 。使用前添加依赖:
<dependency><groupId>com.fujieid</groupId><artifactId>jap-simple</artifactId><version>{latest-version}</version></dependency>然后实现 JapUserService 接口:
import com.fujieid.jap.core.JapUser;import com.fujieid.jap.core.JapUserService;public class JapSimpleUserServiceImpl implements JapUserService {@Overridepublic JapUser getByName(String username) {return new JapUser()}@Overridepublic boolean validPassword(String password, JapUser user) {return user.getPassword().equals(password);}}并实现登录的Controller,就能获得一个账号密码登录功能:
JustAuthPlus - 模块化的开源登录认证中间件

文章插图
 
jap-oauth2 是为了方便快速的集成所有支持标准 OAuth 2.0 协议的平台而添加的增强包,添加依赖
<dependency><groupId>com.fujieid</groupId><artifactId>jap-oauth2</artifactId><version>{latest-version}</version></dependency>实现 JapUserService 接口
public class JapOauth2UserServiceImpl implements JapUserService {/*** 根据第三方平台标识(platform)和第三方平台的用户 uid 查询数据库** @param platform 第三方平台标识* @param uid第三方平台的用户 uid* @return JapUser*/@Overridepublic JapUser getByPlatformAndUid(String platform, String uid) {return null;}/*** 创建并获取第三方用户,相当于第三方登录成功后,将授权关系保存到数据库* (开发者业务系统中 oauth2 user -> sys user 的绑定关系)** @param platform 第三方平台标识* @param userInfo 第三方返回的用户信息* @param tokenInfo token 信息,可以强制转换为 com.fujieid.jap.oauth2.token.AccessToken* @return JapUser*/@Overridepublic JapUser createAndGetOauth2User(String platform, Map<String, Object> userInfo, Object tokenInfo) {// FIXME 业务端可以对 tokenInfo 进行保存或其他操作AccessToken accessToken = (AccessToken) tokenInfo;System.out.println(JsonUtil.toJsonString(accessToken));// FIXME 注意:此处仅作演示用,不同的 oauth 平台用户id都不一样,// 此处需要开发者自己分析第三方平台的用户信息,提取出用户的唯一IDString uid = (String) userInfo.get("userId");// 查询绑定关系,确定当前用户是否已经登录过业务系统JapUser japUser = this.getByPlatformAndUid(platform, uid);if (null == japUser) {// 保存用户japUser = createJapUser();japUser.setAdditional(userInfo);userDatas.add(japUser);}return japUser;}}


推荐阅读