OAuth2密码授予类型与Client_Id& Client_Secret

时间:2015-05-07 22:35:01

标签: authentication oauth-2.0 token

我正在开发一个应用程序,通过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的方法。

谢谢:)

1 个答案:

答案 0 :(得分:4)

没有方法根据规范实施针对授权服务器的客户端身份验证。已经指定可以支持的两种方法是HTTP基本身份验证模式和您在示例中使用的HTTP POST参数模式。显然Spring只支持第一个,这似乎得到了文档的支持:http://projects.spring.io/spring-security-oauth/docs/oauth2.html