django Ошибка набора инструментов oauth unsupported_grant_type - PullRequest
0 голосов
/ 15 марта 2020

Я попытался добавить outh2 в мое приложение django, поэтому я использовал django oauth toolkit. Так что я следовал этому уроку, но если я пытаюсь получить токен пользователя, он всегда выдает ошибку unsupported_grant_type. Как я могу исправить эту ошибку?

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    )
}

OAUTH2_PROVIDER = {
    # parses OAuth2 data from application/json requests
    'OAUTH2_BACKEND_CLASS': 'oauth2_provider.oauth2_backends.JSONOAuthLibCore',
}

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('myapp.api.urls')),
    path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
]

тип клиента: конфиденциальный

тип разрешения авторизации: на основе пароля владельца ресурса

chrome клиент расширенного отдыха

url: http://client_id:client_secret@localhost: 8000 / o / token /

needs.txt

asgiref==3.2.5
autopep8==1.5
certifi==2019.11.28
chardet==3.0.4
Django==3.0.4
django-oauth-toolkit==1.3.0
djangorestframework==3.11.0
idna==2.9
oauthlib==3.1.0
pycodestyle==2.5.0
pytz==2019.3
requests==2.23.0
sqlparse==0.3.1
urllib3==1.25.8

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Просто удалите OAUTH2_BACKEND_CLASS в настройках OAUTH2_PROVIDER .

OAUTH2_PROVIDER = {
    # parses OAuth2 data from application/json requests
    # 'OAUTH2_BACKEND_CLASS': 'oauth2_provider.oauth2_backends.JSONOAuthLibCore',
    # this is the list of available scopes
    'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'}
}

Если вы намереваетесь использовать OAUTH2_BACKEND_CLASS , вам следует отправить тело в формате JSON.

{
    "grant_type":"password",
    "client_id":"<client_id>",
    "client_secret":"<client_secret>",
    "username":"<usename>",
    "password":"<password>"
}
curl -X POST -d '{"grant_type":"password","client_id":"<client_id>","client_secret":"<client_secret>","username":"<username>","password":"<password>"}' http://localhost:8000/o/token/
0 голосов
/ 15 марта 2020

1. вам необходимо создать приложение:

http://localhost:8000/o/applications/

Нажмите на ссылку, чтобы создать новое приложение и заполните форму следующими данными:

Имя: просто имя по вашему выбору

Тип клиента: конфиденциально

Тип разрешения на авторизацию: На основании пароля владельца ресурса и Вы даете clientId и SecretClient

2. Получите свой токен и используйте свой API

curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/

пример:

curl -X POST -d "grant_type=password&username=Alex&password=Won123" -u"cWS5WudFiBhHh6BZxcaOgRGfrZjhcP2rfQcWVyaU:puNJ1SgQbp39Ai1TmYJx0wL9LnC6FNarnY3dgYBA3Z7AgQR5zRcfw5U144zxJ6vndW0jtV4WWKip33kQnFUl4v73xt2IosLGHo7k1w35R7aK8aFL3ZBoMcQ3pyaWjkBT" http://127.0.0.1:8000/o/token/

Имя пользователя и пароль - это учетные данные пользователей, зарегистрированных на вашем сервере авторизации, и, наконец, в ответ вы дайте токен и используйте токен как этот для вашего запроса:

curl -H "Authorization: Bearer <your_access_token>" http://localhost:8000/api/users

обратите внимание на конфигурацию вашего приложения и ваше имя пользователя и пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...