"error": "invalid_client" django-oauth-toolkit - PullRequest
0 голосов
/ 02 января 2019

Я использую django rest framework с django-oauth-toolkit.Когда я запрашиваю токен доступа на моем локальном хосте, он дает мне токен доступа, как показано ниже

~/django_app$ curl -X POST -d "grant_type=password&username=<Your-username>&password=<your-password>" -u"<client-id>:<client-secret>" http://localhost:8000/o/token/
{"access_token": "8u92BMmeZxvto244CE0eNHdLYWhWSa", "expires_in": 36000, "refresh_token": "faW06KKK71ZN74bx32KchMXGn8yjpV", "scope": "read write", "token_type": "Bearer"}

Но когда я запрашиваю токен доступа из того же проекта, размещенного на живом сервере, он выдает мне сообщение об ошибке invalid_client.

~/django_app$ curl -X POST -d "grant_type=password&username=<Your-username>&password=<your-password>" -u"<client-id>:<client-secret>" http://<your-domain>/o/token/ 
{
    "error": "invalid_client"
}

Я не могу понять, откуда возникла проблема.Я много искал и не нашел правильный ответ.Посоветуйте, пожалуйста, что делать, чтобы избавиться от этой ошибки.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Получить токен из django-oauth-toolkit в JavaScript:

async function getToken () {
    let res = await fetch("https://<your_domain>/o/token/", {
        body: new URLSearchParams({
            grant_type: 'password',
            username: '<user_name>',
            password: '<user_pass>',
            client_id: '<client_app_id>',
            client_secret: '<client_pass>'
        }),
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        method: "POST"
    })
    return res.json();
}
console.log(await getToken());

Ваше клиентское приложение Тип разрешения авторизации должен быть: «На основе пароля владельца ресурса» oauth client application: Auth grant type

PS Мне не удалось получить токен через "Content-Type": "application / json" , не знаю почему (документация django-oauth-toolkit ничего не говорит очто).

0 голосов
/ 02 января 2019

Я нашел решение для этого, вместо grant_type=password я использовал grant_type=client_credentials, тогда я получил токен доступа. Вы можете увидеть команду curl ниже.

curl -X POST -d "grant_type=client_credentials&client_id=<your-client id>client_secret=<your-client secret>" http://your-domain/o/token/
{"scope": "read write", "token_type": "Bearer", "expires_in": 36000, "access_token": "ITx5KCjupsdbvbKvNQFyqZDEw6svSHSfdgjh"}

OR

Если вы хотите сделать это с grant-type=password, вот команда для этого:

curl -X POST -d "grant_type=password&username=<your-username>&password=<your-password>&client_id=<your-client id>&client_secret=<your-client secret>" http://your-domain/o/token/
{"access_token": "0BVfgujhdglxC7OHFh0we7gprlfr1Xk", "scope": "read write", "token_type": "Bearer", "expires_in": 36000, "refresh_token": "AwffMPzNXvghlkjhs8dpXk7gbhhjhljlldfE2nI"}

Я передал это https://developer.amazon.com/de/docs/adm/request-access-token.html, так как мое заявление было на AWS.

...