Ldap Auth 作为 Rest 控制器

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

在 application.properties 文件中

    服务器,协议=http:// server.host.name= server.ip= server.port= 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。

以上是关于Ldap Auth 作为 Rest 控制器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Security ldap auth针对多个独立的AD域

Grails SpringSecurity Rest Basic auth + Login Form

基于LDAP下的Samba服务

在Django中修改Active Directory用户

ASP.NET Core 2.0 - Windows Auth 与 LDAP 组到角色

Laravel 使用 auth()->user() 作为 api