сгенерировать токен доступа с помощью Postman

Я написал API, используя Django REST Frameword и Django oAuth Toolkit для аутентификации oauth2 и используя Postman для проверки моего процесса авторизации API.

Я должен отправить следующий запрос на завивку

curl -X POST -d "grant_type=password&username=<user>&password=<password>" -u "<client_id>:<client_secret" http://127.0.0.1:3333/auth/token/

Я могу сгенерировать access_token, просто используя окно Postman Get Access Token

введите здесь описание изображения

Но я хочу сделать это, отправив запрос и передав данные с помощью формы запроса, чтобы я мог протестировать API, а также создать документацию для аутентификации.

Теперь я могу передать данные пользователя (имя пользователя, пароль) в form-data, но как передать client_id и client_secret?

введите здесь описание изображения


person Anuj TBE    schedule 17.05.2018    source источник
comment
Существует три варианта отправки данных через запрос POST: 1. Тело формы публикации, 2. Заголовки n 3. Параметры URL. Можете ли вы написать, как ваш API использует client_id и client_secret? Затем мы можем добавить эти пары "ключ-значение" соответственно.   -  person nandal    schedule 17.05.2018
comment
вы можете видеть, что в запросе curl используется флаг -u. и способ отправки идентификатора и секрета клиента - client_id:client_secret. в нем не используется параметр имени. Итак, я думаю, что он отправляется в заголовке. Но я не могу найти ни одного поля для размещения client_id и secret на вкладке Authorization, а вкладка Headers запрашивает пару ключ-значение.   -  person Anuj TBE    schedule 17.05.2018


Ответы (2)


Чтобы получить полный ответ почтальона, это можно сделать с помощью сценария предварительного запроса. Идентификатор клиента и секрет клиента просто кодируются с помощью схемы кодирования base64. Просто сделайте это:

введите здесь описание изображения

Обратите внимание, что client_id_client_secret — это переменная среды. Если вы не хотите этого делать, удалите первую строку и жестко закодируйте идентификатор и секрет вашего клиента в CryptoJS.enc.Utf8.parse('my-trusted-client:mysecret'), где 'my-trusted- client» — это идентификатор клиента, а «mysecret» — секрет клиента.

Вот код для радости копирования/вставки.

let keys = pm.environment.get('client_id_client_secret');
let encoded = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(keys));
pm.environment.set("base64_client_id_client_secret", encoded);

Теперь создайте заголовок и включите созданную вами переменную:

введите здесь описание изображения

Ценностная часть этого изображения:

Basic {{base64_client_id_client_secret}}

Теперь... просто блаженство почтальона.

person Software Prophets    schedule 23.07.2019

curl шифрует значение параметра -u, которое мы можем увидеть с помощью опции -v (verbose).

Поэтому, чтобы получить значение авторизации заголовка, используйте -v один раз с командой curl. Он напечатает необработанный запрос следующим образом: -

$ curl -X POST -d "grant_type=password&username=<user>&password=<password>" -u "client_id:client_secret" http://127.0.0.1:3000 -v
Note: Unnecessary use of -X or --request, POST is already inferred.
* Rebuilt URL to: http://127.0.0.1:3000/
*   Trying 127.0.0.1...
* TCP_NODELAY set 
* Connected to 127.0.0.1 (127.0.0.1) port 3000 (#0)
* Server auth using Basic with user 'client_id'
> POST / HTTP/1.1
> Host: 127.0.0.1:3000
> Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 55
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 55 out of 55 bytes
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Date: Sat, 19 May 2018 07:09:35 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
< 

В приведенном выше подробном журнале мы можем видеть пары ключ-значение как

> Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=

Собрав эти ключ как "Авторизация" и значение как "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=", вы можете использовать их в заголовках запроса через postman. «Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=» — это зашифрованное значение, сгенерированное с использованием опции -u «client_id:client_secret» с curl.

Надеюсь, это решит проблему аутентификации с использованием запроса почтальона.

person nandal    schedule 17.05.2018
comment
вы имеете в виду client_id как ключ и client_secret как значение? - person Anuj TBE; 17.05.2018
comment
@AnujTBE, я обновил ответ, проверьте, помогает ли это - person nandal; 19.05.2018