Grails OAuth2 登录密码凭据授予返回 invalid_client
Posted
技术标签:
【中文标题】Grails OAuth2 登录密码凭据授予返回 invalid_client【英文标题】:Grails OAuth2 signin Password Credentials Grant returns invalid_client 【发布时间】:2016-01-04 21:27:20 【问题描述】:我正在开发一个受 OAuth2 身份验证保护的基本 grails 应用程序 -- code here。它只不过是 spring-security 和 spring-security-oauth 插件对于入门应用程序的功能。在我的引导程序中(根据入门):
Role roleUser = new Role(authority: 'ROLE_USER').save(flush: true)
User user = new User(
username: 'user',
password: 'password',
enabled: true,
accountExpired: false,
accountLocked: false,
passwordExpired: false
).save(flush: true)
UserRole.create(user, roleUser, true)
new Client(
clientId: 'my-client',
authorizedGrantTypes: ['authorization_code', 'refresh_token', 'implicit', 'password', 'client_credentials'],
authorities: ['ROLE_CLIENT'],
scopes: ['read', 'write'],
redirectUris: ['http://example.com']
).save(flush: true)
我正在尝试按照documentation 中列出的示例流程了解 OAuth 登录流程。
每当我尝试通过此请求使用"Resource Owner Password Credentials Grant" 进行身份验证时:
$ curl -X POST -d "client_id=my-client" \
-d "grant_type=password" -d "username=user" \
-d "password=password" -d "scope=read" \
http://localhost:9090/grails-oauth-service/oauth/token
我收到以下消息:
"error":"invalid_client","error_description":"Bad client credentials"
我做错了什么?我(或我的客户)如何正确地进行一次调用以对服务进行身份验证?
【问题讨论】:
【参考方案1】:睡眠可以解决问题,这真是太神奇了。准备好重新创建整个设置,因为我按照入门指南搞砸了一些东西。
从插件下载页面开始,查看了最新的插件版本:
spring-security-oauth2-provider:2.0-RC5
并根据我的应用检查了由于某种原因我有的地方
spring-security-oauth2-provider:2.0-RC3
我升级了插件,重新运行了s2-init-oauth2-provider
脚本,启动了它,上面的 curl 帖子工作了!浏览change log for RC-5 我看到了
解决影响 OAuth 2.0 资源无状态访问的小问题
所以基本上我遇到了那个版本的 oauth 提供程序插件的错误。欢乐时光。
【讨论】:
您好@adeady,您是否尝试在两个应用程序中将 Grails 中的授权和提供程序服务分开?以上是关于Grails OAuth2 登录密码凭据授予返回 invalid_client的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 OAuth2 的资源所有者密码凭据授予类型时对客户端凭据保密
Spring OAuth2 - 客户端凭据授予类型中的用户信息