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 - 客户端凭据授予类型中的用户信息

OAuth 2.0 中资源所有者密码凭据授予类型的用途是啥?

OAuth2 密码授予与 OpenID 连接

如何使用oAuth2“资源所有者凭据授予”IOS APP?

OAuth2 密码授予混淆