我有一个Spring Boot应用程序,它将Spring Security与OAuth 2.0结合使用。目前,它在基于Spring示例代码的身份验证服务器上运行。然而,运行我们自己的Auth Server一直是促进开发的短期目标,而不是长期目标。我们一直在使用authorization_code授权类型,并希望继续使用它,而不管身份验证服务器的实现是什么。
我正在尝试进行更改,以使用Azure Active Directory中的OAuth 2.0终结点,以充当我们的身份验证服务器。到目前为止,我已经成功调用了/authorize端点。但是获取/token的调用失败,并出现一个invalid request错误。我可以看到请求发出了。
似乎Azure声明为强制的参数没有在POST请求中填充。查看Azure doco,它期望在发布到端点的消息体中定义client_id,而在默认情况下,Spring不会添加它。
有人能告诉我如何向构建访问令牌请求时使用的表单映射添加字段吗?我可以看到在OAuth2ClientConfiguration中设置AccessTokenRequest对象的位置...
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
protected AccessTokenRequest accessTokenRequest(@Value("#{request.parameterMap}")
Map<String, String[]> parameters, @Value("#{request.getAttribute('currentUri')}")
String currentUri) {
DefaultAccessTokenRequest request = new DefaultAccessTokenRequest(parameters);
request.setCurrentUri(currentUri);
return request;
}我是否应该尝试在request.parameterMap spring属性中定义地图?如果是这样的话,我不太确定它是如何工作的。
或者我应该使用AuthorizationServerConfigurerAdapter类中定义的接口之一?
在发送AccessTokenRequest时,我有要包含的信息,但我不知道配置Spring以包含它的最佳方式?谢谢你的帮助。
发布于 2016-11-23 08:21:27
实际上,这是我发现的。我需要更改客户端身份验证方案。只需将以下内容添加到我的应用程序属性中,即可将client_id添加到表单中...
security.oauth2.client.clientAuthenticationScheme=form
如果你使用的是yaml,那么yaml-化它。谢谢你,Spring!
https://stackoverflow.com/questions/40753068
复制相似问题