yii2-oauth2-server 中需要 client_id 和 client_secret 的资源所有者授权类型

Resource Owner grant type requiring client_id and client_secret in yii2-oauth2-server

为什么密码 grant_type 必须与客户端凭据一起提供(在此实施中)???。 oauth2 资源所有者规范只需要

{
    "grant_type" : "password",
    "username" : "some_user_name",
    "password" : "some_password"
}

此实现还需要 client_idclient_secret 与此请求一起发送才能成功.

我只想知道我是否遗漏了什么

另请参考http://andyfiedler.com/2014/09/how-secure-is-the-oauth2-resource-owner-password-credential-flow-for-single-page-apps

我想授予从我的 SPA 访问我的受保护资源的权限。在浏览器源代码中公开客户端凭据存在潜在危险。

此外,https://bshaffer.github.io/oauth2-server-php-docs/overview/grant-types/ 的原始库不会强制使用资源所有者授予类型的客户端凭据

更新 1 13-12-2016

在原来的图书馆看书,我发现他们有"public client"的概念(即没有client_secret的客户端)。

使用 public 客户端,我可以从请求中省略 client_secret。不管怎样,我又看了一遍资源所有者规范,上面没有提到。

这样,资源所有者令牌请求必须以这种方式执行(非标准)

{
    "grant_type" : "password",
    "username" : "some_user_name",
    "password" : "some_password"
    "cliend_id" : "some_client_id"
}

再见

谢谢

出于参考目的,OAuth2 规范确实适用于没有密码的客户端仍然可以在请求正文中传递 client_id 参数的情况,即使客户端身份验证不会完成。在第 2.3.1 节中,您有:

(...) the authorization server MAY support including the client credentials in the request-body using the following parameters:

client_id
REQUIRED. The client identifier issued to the client during the registration process described by Section 2.2.

client_secret
REQUIRED. The client secret. The client MAY omit the parameter if the client secret is an empty string.