gpt4 book ai didi

.net - Google 的 OpenIDConnect 返回一个无法解析的 Base64 token

转载 作者:行者123 更新时间:2023-12-05 01:02:42 25 4
gpt4 key购买 nike

作为理解 OpenIDConnect 的练习,我正在尝试 authenticate in my web app with Google following this guide .

问题是我无法读取 Google 发送到我的应用程序的 token >

var bytes = Convert.FromBase64String(codeEx.Id_token);
var token = Encoding.ASCII.GetString(bytes);

它在第一行失败说:“输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。”

该文档指出:“ID token 是一个以 base 64 编码的加密签名 JSON 对象。”

由于显而易见的原因,我不能将 token 放在这里。我试过了:

我得到代码交换响应,并使用 NewtonSoft.Json 库对其进行反序列化:

  var http = new HttpClient(handler);
HttpResponseMessage result = await http.PostAsync("https://www.googleapis.com/oauth2/v3/token", postData);
var json = JObject.Parse(await result.Content.ReadAsStringAsync());

if (json.Property("error") != null)
throw new Exception(json.Property("error").Value.ToString() + ":" + json.Property("error_description").Value.ToString());

var codeEx = json.ToObject<CodeExchangeResponse>();

我不知道编码是否存在任何潜在问题。我可以在 token 中看到几个“-”和“_”。

知道如何读取 token 吗?

最佳答案

在反序列化 token 的紧凑表示后使用 base64url 解码(而不是普通的 base64),如下所示:

var http = new HttpClient(handler);
var result = await http.PostAsync("https://www.googleapis.com/oauth2/v3/token", postData);
var json = JObject.Parse(await result.Content.ReadAsStringAsync());
var payload = json.id_token.split('.')[1];
payload = payload.Replace('-', '+').Replace('_', '/');
var base64 = payload.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
var token = Convert.FromBase64String(base64);

关于.net - Google 的 OpenIDConnect 返回一个无法解析的 Base64 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28548920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com