Client_Id & Client_Secret 的 OAuth2 密码授权类型

OAuth2 Password Grant Type with Client_Id & Client_Secret

我正在开发一个应用程序以通过 Rest 端点访问它自己的资源。

用户需要通过 email/password 获取访问令牌。完成身份验证服务器配置后,我有这样的观察:

有:

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 : Access is denied (user is anonymous); redirecting to authentication entry point

org.springframework.security.access.AccessDeniedException: Access is denied at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83)

看起来 client_id 和 client_secret 在作为参数发送时未被识别。这是配置问题还是与我使用的 OAuth2 版本有关 (spring-security-oauth2, 2.0.5.RELEASE)

我在 Internet 上遇到的很多示例都建议使用 OAuth2 的方法之一。

谢谢:)

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