您的位置 首页 java

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

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

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

简介

JustAuthPlus(简称 JAP),是 fujieid 在Gitee上开源的登录认证中间件,仓库位于 ,目前版本为 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功能丰富,包括:

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 {

    @Override
    public JapUser getByName(String username) {
        return new JapUser()
    }

    @Override
    public boolean validPassword(String password, JapUser user) {
        return user.getPassword().equals(password);
    }
}  

并实现登录的Controller,就能获得一个账号密码登录功能:

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
     */
    @Override
    public 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
     */
    @Override
    public 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都不一样,
        // 此处需要开发者自己分析第三方平台的用户信息,提取出用户的唯一ID
        String  uid  = (String) userInfo.get("userId");
        // 查询绑定关系,确定当前用户是否已经登录过业务系统
        JapUser japUser = this.getByPlatformAndUid(platform, uid);
        if (null == japUser) {
            // 保存用户
            japUser = createJapUser();
            japUser.setAdditional(userInfo);
            userDatas.add(japUser);
        }
        return japUser;
    }
}  

总结

JustAuthPlus作为一个登录认证中间件,其基于模块化设计,为所有需要登录认证的 WEB 应用提供一套标准的技术解决方案,开发者可以基于 JAP 适配绝大多数的 WEB 系统,简单方便。

文章来源:智云一二三科技

文章标题:JustAuthPlus – 模块化的开源登录认证中间件

文章地址:https://www.zhihuclub.com/186897.shtml

关于作者: 智云科技

热门文章

网站地图