spring-security - 使用 LDAP 在 Spring oauth/token 请求上验证客户端 ID 和客户端密码

标签 spring-security spring-oauth2

我正在研究如何使用 LDAP 对客户端 ID 和客户端密码进行身份验证。

注意:这段 Kotlin 代码...

@Configuration
@EnableAuthorizationServer
class OAuth2AuthorizationServerConfig() : AuthorizationServerConfigurerAdapter() {

我对 Spring 比较陌生,这似乎不是我应该尝试的事情?但是,这似乎是一个有用的选择。为什么?因为它允许我将客户端 secret 管理委托(delegate)给 LDAP 目录,并且有效地允许我的操作团队更改 secret (当然是以某种托管方式)。有了这个,我的应用程序就不需要知道 secret 了。这看起来很整洁?

oauth 端点是基本身份验证 - 这似乎是 Spring 通过 @EnableAuthorizationServer 注释给我的。对 http://somehost/oauth/token 的请求指定 grant_type:client_credentials

我创建了代码来获取任意 token (沙盒)...我想要的是仅指定适用于该客户端的客户端和范围,指定 secret .. .

@Throws(Exception::class)
override fun configure(
        clients: ClientDetailsServiceConfigurer
) {
    // Inlining will create a store per credential entry
    val serviceBuilder = clients.inMemory()
    serviceBuilder.withClient("user").secret("test").scopes("XXX")
}

我尝试了很多不同的想法来将 LDAP Authentication Provider 添加到 ProviderManager 中的托管提供程序集中,但到目前为止都失败了。如果我在运行时调试到 authenticate 方法,我总是只有 AnonymousAuthenticationProviderDaoAuthenticationProvider

以下可能表明我缺乏经验,但这里有一个例子,请阅读过去可能的疯狂 - 只是想看看我是否可以注入(inject) LDAPAuthenticationProvider...

@Autowired
lateinit var providerMan: AuthenticationManager

@Throws(Exception::class)
override fun configure(endpoints: AuthorizationServerEndpointsConfigurer) {
    (providerMan as ProviderManager).providers.add(0,
            LdapAuthenticationProvider(
                    PasswordComparisonAuthenticator(PasswordPolicyAwareContextSource("ldap://something"))
            )
    )
}

因此问题很简单...... 有没有办法添加 LdapAuthenticationProvider,这样我就可以使用 LDAP 来验证客户端 ID 和客户端密码?

最佳答案

要在 LDAP 中拥有客户端 ID 和 secret ,您需要一个基于 LDAP 的 ClientDetailsS​​ervice 实现,而这在 Spring Security OAuth 中不存在。也许将该实现构建为通向 LDAPAuthenticationProvider 的桥梁是可行的,但我不确定这是否是个好主意。在任何情况下,您都必须自己构建实现。

关于spring-security - 使用 LDAP 在 Spring oauth/token 请求上验证客户端 ID 和客户端密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47654430/

相关文章:

java - 在 Spring Security Oauth2 版本 2.0.7.RELEASE 中请求多个范围

java - Spring 安全 : register users during runtime

java - Spring Security 3.0 中的 security-role-ref 和 role-link 等价物是什么?

node.js - 如何使用 React App 正确存储客户端 ID、客户端 key 和 OAuth2 token

spring - 如何在Spring OAuth2资源服务器中使用自定义UserDetailSservice?

java - Spring安全用户详细信息: org. springframework.security.authentication.DisabledException

java - 无法获取用户详细信息: class org. springframework.web.client.RestClientException,无法提取响应:没有合适的

spring-boot - 如何将 Spring Boot 与 Spotify OAuth 2 身份验证集成

java - 如何使用retrofit2进行GET请求?

java - 了解 OAuth2 客户端凭据流