我正在使用django-oauth2-provider和rest-framework在我的API中提供身份验证。 我的移动应用程序将连接到我的REST API以检索一些数据。没有第三方应用程序会参与此过程。
根据this,此用例所需的授权类型将是密码授予。由于将秘密存储在设备中是一个坏主意,我需要在没有它的情况下访问令牌。
我试图在没有秘密的情况下发送请求:
curl -X POST -d "client_id=MY_CLIENT_ID&grant_type=password&username=user&password=pass" http://localhost:8000/oauth2/access_token/
但我得到的回应是:
{"error": "invalid_client"}
我的问题是,是否可以使用django-oauth2-provider执行此操作,以及如何执行此操作。
答案 0 :(得分:1)
您需要通过django管理员界面创建客户端并替换" MY_CLIENT_ID"带有身份证。
答案 1 :(得分:1)
答案 2 :(得分:1)
Authorization Grant Type
设为Resource owner password-based
WSGIPassAuthorization On
放在与WSGIScriptAlias
答案 3 :(得分:0)
您应该使用密码授予类型。以下curl命令适用于django-oauth-toolkit。我相信它也应该与任何其他oauth提供商合作。
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=password&username=user&password=pass&client_id=client_id' 'http://localhost:8000/o/token/'
请参阅以下链接以获取更多信息:https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#password
答案 4 :(得分:0)
只需组合解决方案即可。这对我有用。继续执行Getting Started guide。但是,在创建应用程序时,请提供以下内容:
然后请求应该是:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=password&username=<username>&password=<password>&client_id=<client_id>" http://localhost:8000/o/token/
,或者,如果是JSON, 添加到settings.py:
OAUTH2_PROVIDER = {
# expect request body Content Type application/json
'OAUTH2_BACKEND_CLASS': 'oauth2_provider.oauth2_backends.JSONOAuthLibCore'
}
curl -X POST \
http://localhost:8000/o/token/ \
-H 'Content-Type: application/json' \
-d '{
"grant_type": "password",
"client_id": "<client_id>",
"username": "<username>",
"password": "<password>"
}'