使用LDAPvalidationSpring oauth / token请求上的客户端ID和客户端密钥

我正在调查客户端ID和客户端密码如何通过LDAP进行身份validation。

注意:这个Kotlin代码…

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

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

oauth的终点是基本认证 – 这似乎是Spring给我的@EnableAuthorizationServer注释。 请求http://somehost/oauth/token指定grant_typeclient_credentials

我创建的代码来获取任意的令牌(沙箱)…我想只是指定适用于该客户端的客户端和范围,而不是指定秘密…

 @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向管理的提供者集合中添加一个LDAP Authentication Provider ProviderManager ,从而失败了。 如果我在运行时调试到authenticate方法,我总是只有AnonymousAuthenticationProviderDaoAuthenticationProvider

下面可能显示我的经验不足,但这里有一个例子,请阅读可能的疯狂 – 只是想看看我是否可以注入一个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来validation客户端ID和客户端的秘密?

要在LDAP中拥有客户端ID和密码,您需要一个基于LDAP的ClientDetailsService实现,而这在Spring Security OAuth中不存在。 也许将这个实现构建成LDAPAuthenticationProvider的桥梁是可行的,但是我不确定这是一个好主意。 无论如何,你必须自己构建实现。

我想为社区的答案添加一些细节。

我有一个原型工作得益于这个建议。 我正在使用Apache LDAP API连接到LDAP服务器。

该解决方案相当简单 – 只需创建一个ClientDetailsService ,它检索与传递给loadClientByClientId的clientId相匹配的LDAP条目,并返回相应的ClientDetails对象(使用BaseClientDetails提供的BaseClientDetails )。

你还需要创建一个自定义的PasswordEncoder或者设置正确的编码器,如果Spring给你必要的:

 override fun configure(security: AuthorizationServerSecurityConfigurer) { security.passwordEncoder(SomePasswordEncoder) } 

默认值是纯文本密码编码器。