✅已解决 | 我在后台PYTHON中如何取得登录用户的信息?给的代码示意无法调通。

第四步:通过 Authing 的 IDP 测试你的应用 | Authing 文档
中的:

4. 使用 Code 换取 AccessToken

// 通过第二步获取的 openid-configuration 中的 token_endpoint 字段

POST https://oidc-demo-1.authing.cn/oidc/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

Data:
// 你配置的 OIDC 身份提供商的唯一标识符 ID
client_id:60d6c2e2979ca8666354b225
// 你配置的 OIDC 身份提供商的唯一标识符 Secret
client_secret:xxxxxxxxxxxxxxxxxxxx
// 通过授权码 Code 方式获取 AccessToken
grant_type:authorization_code
// OIDC 身份提供商传给你的 Code
code:xxxxxxxxxxxxxxxxxxxx
// 你的应用的地址
redirect_uri:httxp://localhost:6379

其中,下面这行是什么意思? authorization_code 的值在哪最取得?

// 通过授权码 Code 方式获取 AccessToken
** grant_type:authorization_code**

我们使用登录框返回的URL中只有一个 code 值呀!

这里值的 authorization_code 就是回调链接里面的 code

code:xxxxxxxxxxxxxxxxxxxx
这一行才是使用返回的 code 值吧,俩参数一样?

grant_type:authorization_code 这一行的 authorization_code 是字符串,写死的 “authorization_code”

就是说少了引号,我再试试…

不行。我的后台处理代码如下:

code = request.args.get(“code”)
if (code != None):
# 定义请求header
HEADERS = {
‘Content-Type’: ‘application/x-www-form-urlencoded;charset=utf-8’}
# 定义请求地址
url = “https://myapp-demo.authing.cn/oidc/token
# 通过字典方式定义请求body
FormData = {
“client_id”: ‘60f278bbe9da9c76xxxxxxxxxxxxxxx’,
“client_secret”: ‘76999274b3a980xxxxxxxxxxxxxxxxxxx’,
“code”: code,
“grant_type”: “authorization_code”,
“redirect_uri”: “http://localhost:5000/
}
# 字典转换k1=v1 & k2=v2 模式
data = parse.urlencode(FormData)
content = requests.post(url=url, headers=HEADERS, data=data).text
# content = json.loads(content)
print(“code:”, code)
print(content)

运行返回显示的信息是:

code: oBW-bHF1hgcSH4fhajL6oBsRFP6TS2J6r9730CzVnE6

{“error”:“invalid_grant”,“error_description”:“grant request is invalid”}

到底是哪里调用得不对?!

方便添加一下我的微信吗:etherealcj4,我帮你远程看一下这个问题

解决了。首先是字符串的问题,后面还有其它问题(多次调用以前的code)现在返回正确了。谢谢!

好的 :ok_hand: 后续有问题也可以在论坛及时向我们反馈哈