【问题标题】:Ldap Auth as Rest ControllerLdap Auth 作为 Rest 控制器
【发布时间】:2019-11-24 04:25:50
【问题描述】:

我已经配置了一个远程 Ldap 服务器,我有一个前端,并且期望的行为是:当用户在前端填写登录表单时,我想通过控制器将凭据发送到后端,然后后端应该对我的 ldap 服务器执行查找并返回如果未找到用户,则响应以识别用户(如他的 id)和 null。

我很难理解这个概念,所有示例要么使用本地 ldap,要么重定向到后端的登录表单。我不希望后端的登录表单或保护某些端点。

【问题讨论】:

    标签: spring rest spring-boot spring-security ldap


    【解决方案1】:

    这就是我在项目中所做的:

    在 application.properties 文件中

    1. 服务器,协议=http://
    2. server.host.name=
    3. server.ip=
    4. server.port=
    5. server.url=

    然后我从 RESTController 调用这个服务:

      @Service
        public class ldapService
        {
        @Value("${ldap.server.protocol}")
            private String LDAP_SERVER_PROTOCOL;
    
            @Value("${ldap.server.ip}")
            private String LDAP_SERVER_IP;
    
            @Value("${ldap.server.port}")
            private int LDAP_SERVER_PORT;
    
            @Value("${ldap.service.url}")
            private String LDAP_SERVICE_URL;
    
        public String authenticate(LoginDto loginDto){
    
                UserCredentials userCredentials = new UserCredentials(loginDto.getUserName(), loginDto.getPassword());
    
                RestTemplate restTemplate = new RestTemplate();
                HttpEntity<UserCredentials> httpEntity = new HttpEntity<UserCredentials>(userCredentials);
    
                final String FINAL_URL = LDAP_SERVER_PROTOCOL + LDAP_SERVER_IP + LDAP_SERVER_PORT + LDAP_SERVICE_URL;
    
                UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(FINAL_URL);
    
    
                ResponseEntity<ResponseDto> exchange = restTemplate.exchange(builder.build().encode().toUri(), HttpMethod.POST,
                        httpEntity, ResponseDto.class);
    
                HttpStatus statusCode = exchange.getStatusCode();
                ResponseDto responseDto = exchange.getBody();
    
                // check if response OK and is user validated.
                if (statusCode == HttpStatus.OK)
        {
        //switch according to HttpStatus
        }
    

    【讨论】:

    • 感谢您的评论,这是我的目标,但我无法理解您解决方案中的一些要点:什么是 LDAP_SERVER_PROTOCOL 和 LDAP_SERVICE_URL 我如何了解我的协议和服务 URL?我知道我的 ip 和端口,我使用 openldap。我也不明白查找是如何发生的,它如何知道要签入服务器的文件夹。服务器将发送什么作为成功的响应?我只想返回用户的 ID。
    • 对于我的项目:LDAP_SERVER_PROTOCOL=http:// 和 LDAP_SERVICE_URL=packageName/methodName(abc/authenticate) 将在执行时被休息模板的交换方法命中。我将尝试上传使用给定的用户名和密码对远程 LDAP 服务器进行实际调用的代码。
    • 我很感激,真的没有得到 LDAP 查询,我们在哪里指定文件夹和用户名。另外为什么我们将 packageName/methodName 添加到 url,服务器如何理解或者我需要在服务器上配置一些东西?我只安装了 OpenLdap 和 phpLdapAdmin。
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多