我试图了解如何使用 OAuth2RestTemplate 对象来使用我的 OAuth2 安全 REST 服务(它在不同的项目下运行,让我们假设也在不同的服务器上等……)
我的 REST 服务的一个例子是:
http://localhost:8082/app/helloworld
-> 访问此 URL 会产生错误,因为我未通过身份验证
要请求令牌,我会去:
http://localhost:8082/app/oauth/token?grant_type=password&client_id=restapp&client_secret=restapp&username=**USERNAME**&password=**PASSWORD**
收到令牌后,我可以使用以下 URL(插入的示例令牌)连接到 REST API
http://localhost:8082/app/helloworld/?access_token=**4855f557-c6ee-43b7-8617-c24591965206**
现在我的问题是如何实现可以使用此 OAuth2 安全 REST API 的第二个应用程序?我真的没有找到任何工作示例,您可以在其中提供用户名和密码(例如,来自登录表单),然后生成一个可以重新用于从 REST API 获取数据的令牌。
我目前尝试使用以下对象:
BaseOAuth2ProtectedResourceDetails baseOAuth2ProtectedResourceDetails = new BaseOAuth2ProtectedResourceDetails();
baseOAuth2ProtectedResourceDetails.setClientId("restapp");
baseOAuth2ProtectedResourceDetails.setClientSecret("restapp");
baseOAuth2ProtectedResourceDetails.setGrantType("password");
// how to set user name and password ???
DefaultAccessTokenRequest accessTokenRequest = new DefaultAccessTokenRequest();
OAuth2ClientContext oAuth2ClientContext = new DefaultOAuth2ClientContext(accessTokenRequest());
OAuth2RestTemplate restTemplate = new OAuth2RestTemplate(baseOAuth2ProtectedResourceDetails,oAuth2ClientContext);
但这行不通:(
非常感谢任何想法、工作示例或教程的链接。
原文由 Joachim Seminck 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以在此处找到编写 OAuth 客户端的示例:
在您的情况下,您不能只对所有内容使用默认类或基类,您有多个类 Implementing
OAuth2ProtectedResourceDetails
。配置取决于您配置 OAuth 服务的方式,但从您的 curl 连接假设我建议:不要忘记
@EnableOAuth2Client
在你的配置类上,我也建议尝试你正在使用的 url 首先使用 curl,也尝试使用调试器跟踪它,因为很多异常只是被消耗并且由于安全原因从未打印出来,因此很难找到问题所在。您应该使用logger
和debug
启用集。祝你好运我在 github 上上传了示例 springboot 应用程序 https://github.com/mariubog/oauth-client-sample 来描述你的情况,因为我找不到你的场景的任何示例。