我正在开发一个受OAuth2身份验证保护的基本grails应用程序——代码在这里。它只不过是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)
我试图理解OAuth登录流以下的示例流中列出的文档。
每当我尝试使用"资源所有者密码凭证授予"与此请求进行身份验证时:
$ 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"}
我做错了什么?我(或我的客户机)如何正确地进行单个调用以对服务进行身份验证?
睡眠在解决问题方面的作用是惊人的。我准备重新创建整个设置,我在入门指南中搞砸了一些东西。
从插件下载页面开始,查看最新的插件版本:
spring-security-oauth2-provider: 2.0 - RC5
并与我的应用进行对比因为某些原因我在应用中使用了
spring-security-oauth2-provider: 2.0 - RC3
我升级了插件,重新运行了s2-init-oauth2-provider
脚本,启动了它,上面的curl帖子工作了!浏览RC-5的变更日志,我看到
解决影响OAuth 2.0资源无状态访问的一些小问题
所以基本上我在oauth provider插件的那个版本遇到了一个bug。有趣的时代。