当前位置: 首页 > 知识库问答 >
问题:

使用LDAP身份验证的Spring Boot REST API

花阳辉
2023-03-14

*更新:我设法将它配置为能够使用HttpBasic接受凭据。现在我想知道如何使用基于LDAP组的用户角色(例如,经理、开发人员)为特定endpoint设置权限

共有1个答案

长孙弘壮
2023-03-14

这实际上可以用Spring Boot非常简洁地完成。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.so</groupId>
    <artifactId>rest-ldap</artifactId>
    <version>1.0.1</version>
    <name>rest-ldap</name>
    <description>SO REST LDAP Solution</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-ldap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

app.java

package com.so;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableWebSecurity
@RestController
@SpringBootApplication
public class App extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .httpBasic()
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .csrf()
                .disable();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
        authenticationManagerBuilder
                .ldapAuthentication()
                .contextSource()
                .url("ldap://ldap-server.com:3268")
                .managerDn("CN=MGR_USERNAME")
                .managerPassword("MGR_PASSWORD")
                .and()
                .userSearchFilter("CN={0}");
    }

    @RequestMapping
    public Authentication getAuth() {
        return SecurityContextHolder.getContext().getAuthentication();
    }

    public static void main(String[] args) {
        SpringApplication.run(com.so.App.class, args);
    }

}
HTTP/1.1 200
Set-Cookie: JSESSIONID=COOKIE-VALUE; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 01 Jan 1970 00:00:00 GMT
{
  "authorities": [],
  "details": {
    "remoteAddress": "127.0.0.1",
    "sessionId": null
  },
  "authenticated": true,
  "principal": {
    "dn": "cn=USERNAME",
    "password": null,
    "username": "USERNAME",
    "authorities": [],
    "accountNonExpired": true,
    "accountNonLocked": true,
    "credentialsNonExpired": true,
    "enabled": true,
    "timeBeforeExpiration": 2147483647,
    "graceLoginsRemaining": 2147483647
  },
  "credentials": null,
  "name": "USERNAME"
}
 类似资料:
  • 我有一个asp。net(C#)设置为使用LDAP进行身份验证。一切正常,我可以和我们目录中的任何用户一起登录。问题是,我需要将某些页面限制为特定组中的人。我正在使用登录查看帐户文件夹的方法。 我的网站设计很简单,它有三个页面,一个供所有人查看(账户文件夹之外),另外两个需要身份验证。我希望一个组可以访问两个网页,另一个组只能访问其中一个网页。 我试过: 但不管我的用户不在该组中。我有一个LDAP浏

  • 我已经创建了一个Restful应用编程接口。我在这里使用LDAP身份验证。我们公司有一个LDAP目录服务器,我在我的中使用下面的方法。 这是我的LDAP身份验证方法,我将此方法用作服务层中的实用程序。 这是我的服务层类,我将实用程序类作为一种注入,可以用于身份验证方法。当我以swagger或postman用户名和密码发送请求时,给定来自请求的值,我会将它们保存到表的数据库中。但在坚持之前,身份验证

  • 我使用Presto Cli测试ldap,下面是以下命令: 它不要求密码,我能够连接到Presto集群,并能够运行查询。为什么LDAP身份验证对此没有任何帮助?

  • 我正在尝试使用passport ldapauth npm验证openLDAP用户名和密码。在执行下面的代码时,我总是收到错误消息:“缺少凭据”。请帮助我我的代码有什么问题。 有关更多详细信息,请参阅此badRequestMessage flash消息以查找缺少的用户名/密码(默认值:“缺少凭据”)

  • 我正在尝试在ms access 2010中使用用户名和密码进行ldap身份验证。我似乎无法理解这一点,并在网上尝试了不同的代码,但似乎都不起作用。有人能帮忙吗? 以下是我从这里学到的 我收到的错误是 “错误:服务器无法运行。-2147217865” 更改为ip地址立即获取以下错误 ,但它可能来自其他地方在我的代码.我将如何检查,如果ldap是成功的?

  • 我需要连接到LDAP服务器,但出现以下错误: javax。命名。AuthenticationException:[LDAP:错误代码49-80090308:LDAPPER:DSID-0C09034,注释:AcceptSecurityContext错误,数据525,向量 用户名和密码正确,我尝试设置相同的用户并传入另一个用编写的应用程序。NET,它在那里工作,但在Java中,我收到了错误消息。 我的