You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用Convert.FromBase64String解析Bearer Token报错求助

解决C#解析Bearer Token的Base64错误问题

首先你犯了一个关键错误:不能把整个Bearer Token当作一个Base64字符串处理,Bearer Token是用.分隔的三段Base64Url编码内容(头部、载荷、签名),每一段都需要单独转换为标准Base64格式后再解码。

正确的处理步骤:

  • 先把Token按.拆分成三个部分,跳过空段(如果有的话)
  • 对每一段单独进行Base64Url到标准Base64的转换:
    1. 将字符-替换为+,_替换为/
    2. 根据字符串长度补充填充符=:Base64要求长度是4的倍数,计算当前长度模4的结果:
      • 余数为0:无需填充
      • 余数为2:补充2个=
      • 余数为3:补充1个=
  • 对转换后的每一段单独调用Convert.FromBase64String解码

以下是可直接使用的C#代码示例:

string bearerToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImFpbV9hcGlvYXV0aGRpdCJ9.eyJzY29wZSI6WyJSUzQwMWsvRW1wbG95ZWUvQmVuZWZpY2lhcnkiXSwiZXhwIjoxNjk1ODgzMDYwLCJqdGkiOiI5ODhjNjcxYS0wMzhlLTRkMTMtYjYzOS1hMGY4YmI3N2VlMDYiLCJjbGllbnRfaWQiOiI1ZDE3MGFjOS1jZDY2LTQxNWYtODMzYS02Nzc2NDMwOTc5MjgifQ.SL3AC06E-OLB2yYmCQsOXdzFjeF2-R271QWswzCiEl_U77el6iWvfCQ2GxeBB2-AjVVJ-5gxiu0LI9sTgucK9Xhjnx5W_ZVQgzr_XSa2QcEIGXT5BH1a7OIEd7XTZT6WWwtzcA4QB5vXamA7KcWhxP1TeqrAl2Vd0AE-JagVS1FIHt70BLiqy21z_fsL4J4sE6gxVn8R5g9Djjy-UsH64anIgEZzrLbbDqP6AbSPLJIqpEq8T7W8ee8KGps2Z-IKg4XRv1_JqYPo4f_Qj21b8bpGp5DzifKu3UF9hrInAS9OxC8e1ZW5jesXiux62oWe7gHAay37m_4sEu0JNrbd_g";

// 拆分Token为三段
string[] tokenParts = bearerToken.Split('.', StringSplitOptions.RemoveEmptyEntries);

foreach (string part in tokenParts)
{
    // 转换Base64Url到标准Base64
    string base64 = part.Replace('-', '+').Replace('_', '/');
    // 补充填充符
    switch (base64.Length % 4)
    {
        case 2: base64 += "=="; break;
        case 3: base64 += "="; break;
    }

    // 解码
    byte[] decodedBytes = Convert.FromBase64String(base64);
    // 如果需要转成字符串(比如查看载荷内容)
    string decodedText = System.Text.Encoding.UTF8.GetString(decodedBytes);
    Console.WriteLine(decodedText);
}

另外补充:如果你只是想解析JWT的载荷内容,不用自己处理Base64转换,直接用JWT库(比如System.IdentityModel.Tokens.Jwt)会更简单,避免手动处理的错误。

内容的提问来源于stack exchange,提问作者msbyuva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:53:14