JA Plus 开发者文档 JA Plus 开发者文档
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)

FuJie Team

以开源的形式赋能开发者. Just auth into any app.
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)
  • 使用指南
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
      • 准备 LDAP 服务
        • 启动 LDAP 服务以及 GUI
        • 添加测试用户
      • 集成 jap-ldap
        • 引入依赖
        • 实现 JapUserService
        • 实现 Controller
        • 测试登录
        • 使用邮箱登录
      • LdapConfig 配置项
      • 示例 Demo 项目
    • JAP 错误代码
  • IDS

  • starter

  • 指南
  • 快速开始
FuJie Team
2021-10-25

使用jap-ldap

提示

jap-ldap 支持使用 ldap 中的用户进行身份认证。适配 ldap 中标准密码加密类型,如:clear, k5key, md5, smd5, sha, ssha, sha512, sha256, ext_des, md5crypt, sha256crypt, sha512crypt 和 crypt。

# 准备 LDAP 服务

# 启动 LDAP 服务以及 GUI

新建 docker-compose.yml

填充如下内容:

version: '3.3'
services:
  ldap:
    image: osixia/openldap
    container_name: ldap
    hostname: ldap
    ports:
      - 389:389
      - 636:636
    environment:
      # 是否启用 TLS
      LDAP_TLS: "false"
      # LDAP 组织名称
      LDAP_ORGANISATION: test
      # LDAP 域名
      LDAP_DOMAIN: test.com
      # LDAP 密码,默认登录用户名:admin
      LDAP_ADMIN_PASSWORD: 123456
      LDAP_CONFIG_PASSWORD: 123456
    volumes:
      # 数据库存储目录
      - /var/ldap/data:/var/lib/ldap
      # 配置文件目录
      - /var/ldap/conf:/etc/ldap/slapd.d
    restart: always
  # Redis
  ldap-admin:
    image: osixia/phpldapadmin
    container_name: ldap-admin
    hostname: ldap-admin
    environment:
      # 禁用HTTPS
      PHPLDAPADMIN_HTTPS: "false"
      # LDAP 的 IP 或者域名,此处为容器名
      PHPLDAPADMIN_LDAP_HOSTS: ldap
    ports:
      - 19999:80
    restart: always
    depends_on:
      - ldap
    links:
      - ldap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

启动 docker 容器:docker-compose -p ldap up -d

提示

  • Docker 以及 Docker Compose 需要开发者自己安装。
  • 如果有非 Docker 的 LDAP 服务也可以使用。

# 添加测试用户

启动完成后访问:http://localhost:19999/index.php (opens new window)

点击左侧的 “login” 按钮使用管理员(启动 docker 容器时指定的)账号密码登录

本例的账号密码

账号:cn=admin,dc=test,dc=com
密码:123456

创建用户

按照提示填写:

选择 ”commit“ 按钮进行确认

创建好的用户信息如下:

关于密码加密算法

目前 jap-ldap 已经适配了 ldap 的如下密码加密算法:clear、md5、sha、ssha、sha512、k5key、md5crypt、sha256crypt、sha512crypt。如果选择了其他加密算法,可能导致登录失败。

# 集成 jap-ldap

# 引入依赖

<dependency>
    <groupId>com.fujieid</groupId>
    <artifactId>jap-ldap</artifactId>
    <version>{latest-version}</version>
</dependency>
1
2
3
4
5

# 实现 JapUserService

JapUserService 是 JAP 调用(操作)开发者业务系统中的用户接口。使用 jap-http-api 模块时,如果指定的认证 HTTP 认证方式是 Bearer 认证,则需要实现 saveHttpAuthedJapUser 方法和 getByName 方法。

public class JapLdapUserServiceImpl implements JapUserService {

    private static List<JapUser> userDatas = new ArrayList<>();

    @Override
    public JapUser createAndGetLdapUser(Object userInfo) {
        // 转换 object 为 LdapPerson
        LdapPerson ldapPerson = (LdapPerson) userInfo;
        // 将 ldapPerson 持久化到数据库中或者其他媒介中
        JapUser japUser = new JapUser();
        japUser.setUserId(ldapPerson.getUid());
        japUser.setUsername(ldapPerson.getUid());
        // 此处仅作演示,保存的是加密后的密码
        japUser.setPassword(ldapPerson.getPassword());
        japUser.setAdditional(ldapPerson);
        userDatas.add(japUser);
        return japUser;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 实现 Controller

import com.fujieid.jap.core.JapUserService;
import com.fujieid.jap.core.config.JapConfig;
import com.fujieid.jap.core.context.JapAuthentication;
import com.fujieid.jap.core.strategy.JapStrategy;
import com.fujieid.jap.demo.ldap.config.JapConfigContext;
import com.fujieid.jap.http.adapter.jakarta.JakartaRequestAdapter;
import com.fujieid.jap.http.adapter.jakarta.JakartaResponseAdapter;
import com.fujieid.jap.ldap.LdapConfig;
import com.fujieid.jap.ldap.LdapStrategy;
import com.fujieid.jap.sso.config.JapSsoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @version 1.0.0
 * @since 1.0.0
 */
@RestController
@RequestMapping("/ldap")
public class JapLdapController {
    @Autowired
    private JapUserService japUserService;

    @GetMapping("/login")
    public String toLogin(HttpServletRequest request, HttpServletResponse response) {
        JapConfigContext.strategy = "ldap";
        if (JapAuthentication.checkUser(new JakartaRequestAdapter(request), new JakartaResponseAdapter(response)).isSuccess()) {
            return "redirect:/";
        }
        return "login";
    }

    @PostMapping("/login")
    public Object renderAuth(HttpServletRequest request, HttpServletResponse response) {
        JapStrategy ldapStrategy = new LdapStrategy(japUserService, new JapConfig());
        return ldapStrategy.authenticate(new LdapConfig()
                        .setUrl("ldap://localhost:389")
                        .setBindDn("cn=admin,dc=test,dc=com")
                        .setCredentials("123456")
                        .setBaseDn("dc=test,dc=com")
                        .setTrustStore("")
                        .setTrustStorePassword(""),
                new JakartaRequestAdapter(request),
                new JakartaResponseAdapter(response));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

# 测试登录

测试 /ldap/login 接口:

# 使用邮箱登录

如果使用 email 登录,在配置 LdapConfig 时需要自定义 filter:

new LdapConfig()
    // ...
    .setFilters("(&(objectClass=inetOrgPerson)(mail=%s))")
1
2
3

小贴士

如果需要使用其他属性登录,可以参考【使用邮箱登录】修改 filter 即可。

# LdapConfig 配置项

参数名 参数类型 必填 解释
url String √ LDAP 数据源 URL,如:ldap://localhost:389
bindDn String √ LDAP 管理员用户名,如:cn=admin,dc=example,dc=org
credentials String √ LDAP 管理员密码
baseDn String √ 基本检索目录,如:dc=example,dc=org
filters String x 查询条件,默认为 (&(objectClass=organizationalPerson)(uid=%s))
trustStore String x 使用 LDAPS 时必须配置该参数,表示可信证书
trustStorePassword String x 可信证书的密码
usernameField String × 通过 request.getParameter(usernameField) 从 request 中获取用户名,默认为“username”
passwordField String × 通过 request.getParameter(passwordField) 从 request 中获取密码,默认为"password"

# 示例 Demo 项目

  • https://gitee.com/fujieid/jap-ldap-demo (opens new window)
编辑 (opens new window)
#jap-ldap
Last Updated: 2021/11/02, 22:29:24
使用jap-http-api
JAP 错误代码

← 使用jap-http-api JAP 错误代码→

最近更新
01
经验总结:关于为 JAP 开发不同语言的 Demo 的总结
11-02
02
jap-spring-boot-starter 使用帮助
10-28
03
jap-simple-spring-boot-starter 模块使用帮助
10-12
更多文章>
Theme by Vdoing | Copyright © 2021-2022

友情链接:UniAdmin | 江如意的博客

Copyright © 2021-2040 FUJIE. All rights reserved. 北京符节科技有限公司版权所有 | 京ICP备2020044519号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式