【问题标题】:generate access token using Postman使用 Postman 生成访问令牌
【发布时间】:2018-05-17 19:18:42
【问题描述】:

我使用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/

我可以简单地使用 Postman Get Access Token 窗口生成access_token

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

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

【问题讨论】:

  • 通过 POST 请求发送数据有 3 个选项,1. Post Form Body,2. Headers n 3. Url Params。你能写出你的 API 是如何使用 client_id 和 client_secret 的吗?然后,我们可以相应地添加这些键值对
  • 你可以看到在 curl 请求中使用了-u 标志。发送客户端 ID 和密码的方式是client_id:client_secret。其中没有使用名称参数。所以,我认为它是在标题中发送的。但我找不到任何字段将client_idsecret 放入Authorization 选项卡和Headers 选项卡要求键值对。

标签: postman django-oauth


【解决方案1】:

对于完整的 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}}

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

【讨论】:

    【解决方案2】:

    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=
    

    收集这些key为“Authorization”,value为“Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=”后,就可以通过postman在请求的header中使用了。 "Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=" 是使用 curl 的 -u "client_id:client_secret" 选项生成的加密值。

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

    【讨论】:

    • 您的意思是client_id 作为键,client_secret 作为值?
    • @AnujTBE,我​​已经更新了答案,看看有没有帮助
    猜你喜欢
    • 2019-11-19
    • 2021-03-31
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2014-03-07
    • 2017-06-22
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多