我有一个Spring Boot应用程序,它使用带有OAuth 2.0的Spring Security。目前,它基于Spring示例代码对认证服务器进行操作。但是,运行我们自己的Auth服务器一直是促进开发的短期目标,而不是长期目标。我们一直在使用authorization_code授权类型,并希望继续使用它,无论Auth Server实现如何。
我正在尝试更改以在Azure Active Directory中使用OAuth 2.0端点,以充当我们的身份验证服务器。到目前为止,我已成功调用/ authorize端点。但是获取/ token的调用因失败请求错误而失败。我可以看到请求消失。
看来,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以包含它的最佳方法?谢谢你的帮助。
答案 0 :(得分:0)
实际上,我发现了这一点。我需要更改客户端身份验证方案。只需将以下内容添加到我的应用程序属性中,就将client_id添加到表单....
security.oauth2.client.clientAuthenticationScheme =形式
如果你正在使用yaml,那么yaml-ize它。谢谢春天!