授予访问令牌类型authorization_code获取错误invalid_client

时间:2014-10-14 10:11:44

标签: django oauth-2.0 django-rest-framework

我使用django-oauth2-provider来构建授权服务器。当我尝试使用此命令获取access_token时:

curl -d "client_id=513204402d4b4f4d62e2&grant_type=authorization_code&response_type=code" http://127.0.0.1:8000/oauth2/access_token    

我收到错误:invalid_client

我已经创建了客户端,client_type是Confidential 我该如何解决?

1 个答案:

答案 0 :(得分:2)

如果您的客户是保密的,您必须进行身份验证才能发出访问令牌。

我认为它是一个密码客户端。您只需在POST请求中添加client_secret=CLIENT_SECRET_HERE参数,或在授权标头中设置客户端凭据。

示例:

curl -d "client_id=CLIENT_ID_HERE&client_secret=CLIENT_SECRET_HERE&...

curl --user CLIENT_ID_HERE:CLIENT_SECRET_HERE -d "...

授权代码授权类型是两步流程。

  1. 您可以在资源所有者允许您的客户端之后获得授权码。
  2. 您使用授权码获取访问令牌。
  3. 您正在尝试发送POST请求,因此我认为如果您已拥有授权码。 得到invalid_request,因为您没有在curl命令中设置code参数:

    curl -X POST -d "client_id=CLIENT_ID_HERE&client_secret=CLIENT_SECRET_HERE&grant_type=authorization_code&code=AUTHORIZATION_CODE_HERE&redirect_uri=REDIRECT_URI_HERE" http://127.0.0.1:8000/oauth2/access_token