我正在尝试使用 Django OAuth Toolkit 为 Django + Rest Framework 设置 OAuth2,这是使用“基于资源所有者密码”授权类型时我无法理解的难题。

我可以使用以下方法为注册应用程序(客户端所有者)的同一用户成功获取 access_token:

python - Django OAuth 工具包  "resource-owner password based"授权类型-LMLPHP

但是,当我尝试使用相同的 client_id 和 client_secret,但为不同的用户更改 usernamepassword 时,我得到
{ "error_description": "Invalid credentials given.", "error": "invalid_grant"}
所以看起来注册的应用程序只能使用一个“资源所有者”——“应用程序(客户端)所有者”本身,这使得“基于密码的资源所有者”授权类型无用,因为它的作用与“客户端凭据”相同但不使用“用户名”和“密码”。换句话说,我需要注册的应用程序代表另一个用户,而不是注册应用程序的用户(我),但我无法绕过它。

当然我总是可以编写自定义授权代码,但它不应该是开箱即用的吗(我想知道)?

最佳答案

问题是简单的错误配置和误用,导致了模棱两可的行为。

这有效:

  • base64 编码的“授权” header ( client_id:client_secret )
  • 确保应用程序设置设置为“基于资源所有者密码”。请注意,它不能是 'Public',此流程绝对需要 client_secret
  • 关于python - Django OAuth 工具包 "resource-owner password based"授权类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32662816/

    10-15 22:52