正文中的 Spring Boot OAuth2RestTemplate 客户端凭据
Posted
技术标签:
【中文标题】正文中的 Spring Boot OAuth2RestTemplate 客户端凭据【英文标题】:Spring Boot OAuth2RestTemplate Client Credentials in Body 【发布时间】:2020-09-30 21:55:46 【问题描述】:我试图配置 Spring Boot OAuth2RestTemplate 来为 OAuth2 资源服务器发出访问令牌。资源服务器只接受请求正文中的凭据。
类似这样的:
grant_type: "client_credentials"
scope: ""
client_id: "client"
client_secret: "superdupersecret"
在 Postman 中,我可以通过在“获取新的访问令牌”对话框中选择“在正文中发送客户端凭据”来归档它。
但是,我需要在我的 Spring Boot 应用程序中获取此令牌。我调试了 OAuth2RestTemplate(以及模板使用的类),但找不到将其配置为将凭据作为请求正文发送的方法。
我是完全走错了路还是只是错过了什么?
目前我这样配置模板:
private fun resourceDetails(): BaseOAuth2ProtectedResourceDetails?
val resourceDetails: BaseOAuth2ProtectedResourceDetails = ClientCredentialsResourceDetails()
resourceDetails.id = clientId
resourceDetails.clientId = clientId
resourceDetails.clientSecret = clientSecret
resourceDetails.accessTokenUri = accessTokenUri
//resourceDetails.clientAuthenticationScheme = AuthenticationScheme.header
return resourceDetails
我找到了 clientAuthenticationScheme 参数,但只支持查询、表单和标题
【问题讨论】:
找到解决方案了吗? 【参考方案1】:您必须在 clientAuthenticationScheme 和 authenticationScheme 中使用 AuthenticationScheme.form 将数据放入内容类型为 application/x-www-form-urlencoded 的正文中。它对我有用。
请求将是这样的:
POST /auth/oauth/v2/token HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 136
client_id=user1&client_secret=pass1&grant_type=client_credentials&scope=admin
【讨论】:
以上是关于正文中的 Spring Boot OAuth2RestTemplate 客户端凭据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 spring-boot Web 客户端中发送请求正文?
Spring boot——使用Freemarker撰写html邮件正文