我正在开发一个应用程序,通过Rest端点访问自己的资源。
用户需要通过电子邮件/密码获取访问令牌。完成身份验证服务器配置后,我有这样的观察:
使用:
curl client:secret@localhost:9999/uaa/oauth/token -d grant_type=password -d username=user -d password=password
我得到了正确答案:
{"access_token":"7541a4f6-e841-41a0-8a54-abf8e0666ed1","token_type":"bearer","refresh_token":"d3fdd7e3-53eb-4e7b-aa45-b524a9e7b316","expires_in":43199,"scope":"openid"}
但是:
curl http://localhost:9999/uaa/oauth/token -d grant_type=password -d username=user -d password=password -d client_id=client -d client_secret=secret
我收到以下错误:
DEBUG 4123 --- [nio-9999-exec-7] o.s.s.w.a.ExceptionTranslationFilter :访问被拒绝(用户是匿名的);重定向到身份验证 切入点
org.springframework.security.access.AccessDeniedException:访问是 否认了 org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83)
看起来像client_id&作为参数发送时,不会识别client_secret。这是配置问题还是与我正在使用的OAuth2版本有关( spring-security-oauth2 , 2.0.5.RELEASE )
我在互联网上遇到的很多例子都建议使用OAuth2的方法。
谢谢:)
答案 0 :(得分:4)
没有方法根据规范实施针对授权服务器的客户端身份验证。已经指定可以支持的两种方法是HTTP基本身份验证模式和您在示例中使用的HTTP POST参数模式。显然Spring只支持第一个,这似乎得到了文档的支持:http://projects.spring.io/spring-security-oauth/docs/oauth2.html