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