【问题标题】:How to generate authorization request header?如何生成授权请求标头?
【发布时间】:2019-01-01 16:58:45
【问题描述】:

如何生成授权请求标头?

我已经阅读了有关authorization request header 的信息,并使用base 64 中的用户名和密码生成了一个,但是当我在请求标头上传递它时它不起作用("error": "invalid_client)。

使用 Postman 发出请求,一切正常:

POST /oauth/token
content-type: application/x-www-form-urlencoded
authorization: Basic M1g4Vlk2QllHOFFJTDA3amt1cWpsUnNKOmhoWkNlSEg0SzFuVVJ2VTZmNUs5MmFiTlNSN3h3ZlBCYVN6OXI1WG1pcDNZOGJCbA==
user-agent: PostmanRuntime/7.1.5
accept: */*
host: 127.0.0.1:5000
accept-encoding: gzip, deflate
content-length: 97

Obs ¹ : api 使用密码授权类型并返回不记名令牌

Obs ²:当我使用用户名和密码 (base64.b64encode(b'')) 生成授权请求标头时,输出的长度为 20 个字符

【问题讨论】:

  • b'Basic ' + base64.b64encode(b'username:pass') ?
  • 不行,我现在就是这样!

标签: python api flask header postman


【解决方案1】:

你如何在 python 中发送这个 post 请求?

为什么不使用requests?你甚至不需要关心它:

import requests

requests.post(url, data=data, auth=(username, passwd))

【讨论】:

  • requests.post('http://127.0.0.1:5000/oauth/token', data=payload, header=header).json(),因为除了用户名和密码,我还需要传递client_id、client_secret、scope和grant_type。是的,我确实尝试过auth,但我收到了同样的错误。
  • 使用response.request查看发送的请求并与邮递员中的工作请求进行比较。也许您可以列出 res.request.header res.request.body 或在您的问题中有用的内容来帮助我们和您自己。
  • 没有work(在应用程序中使用b64encode(b'username:password'))和work(使用邮递员的'authorization': 'Basic ...'
  • 我不知道为什么,但是在base 64中传递client_id和client_secret它可以工作,我知道Http协议指定传递用户名和密码......我研究了它,但我什么也找不到。感谢支持,不胜感激!
【解决方案2】:

在 Flask Authlib 中,您可以定义三种类型的 Auth 方法:client_secret_basic、client_secret_post 和 none,这些类型表示巫婆参数以及您需要如何在 headers 中传递它们。这是参考RFC6749 规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2021-12-19
    • 2020-03-29
    • 2017-04-17
    相关资源
    最近更新 更多