1

我已经编写了使用Django REST FramewordDjango oAuth Toolkit用于 oauth2 身份验证的API,并用于Postman测试我的 API 授权过程。

我必须发送以下 curl 请求

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简单地使用 PostmanGet Access Token窗口生成

在此处输入图像描述

但我想通过发送请求并使用请求表单传递数据来做到这一点,这样我就可以测试 API 并生成身份验证文档。

现在,我可以传递用户数据(用户名、密码),form-data但如何传递client_idclient_secret

在此处输入图像描述

4

2 回答 2

2

对于完整的 Postman 答案,完成此任务的方法是使用预请求脚本。客户端 id 和客户端密码简单地使用 base64 编码方案进行编码。只需这样做:

在此处输入图像描述

请注意,client_id_client_secret 是一个环境变量。如果您不想这样做,请删除第一行并将您的客户端 ID 和密码硬编码到 CryptoJS.enc.Utf8.parse('my-trusted-client:mysecret') 中,其中 'my-trusted- client' 是客户端 ID,'my​​secret' 是客户端密码。

这是复制/粘贴欢乐的代码。

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}}

现在......只是邮递员的幸福。

于 2019-07-23T15:31:42.763 回答
1

curl 对 -u 参数的值进行加密,我们可以使用 -v (verbose) 选项看到该值。

因此,要收集标头的授权值,请在 curl 命令中使用 -v 一次。它将按如下方式打印原始请求:-

$ 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=

将这些键收集为“授权”并将值收集为“基本 Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=”后,您可以通过邮递员在请求的标头中使用它们。"Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=" 是使用 curl 的 -u "client_id:client_secret" 选项生成的加密值。

希望这将使用邮递员请求解决身份验证问题。

于 2018-05-17T19:57:50.573 回答