【问题标题】:JWT Fire base verify IDJWT Fire base 验证 ID
【发布时间】:2022-01-16 04:00:37
【问题描述】:

我已经复制了一个库来验证基于 respo 的 firebase 令牌。我的应用程序像后端一样使用 azure 函数,因此在用户登录后,每个操作都会使用令牌发送到 azure 函数,并且 azure 函数将验证该令牌然后响应结果。该库从here 获取公钥。我创建了一个天蓝色函数来测试这个库。我的要求:

var client = new RestClient("http://localhost:7071/api/test-connection");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("x-requested-with", "XMLHttpRequest");
request.AddHeader("Authorization", "Bearer <My Firebase Token>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

我遇到了异常

IDX10516: Signature validation failed. Unable to match key: 
kid: 'System.String'.
Exceptions caught:
 'System.Text.StringBuilder'. 
token: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'. Valid Lifetime: 'System.Boolean'. Valid Issuer: 'System.Boolean'

我花了两天多的时间研究原因和解决方案。一周前我的代码运行良好。问题是我从google得到的公钥造成的吗?

【问题讨论】:

    标签: c# firebase-authentication jwt


    【解决方案1】:

    我遇到了同样的错误,并且很难调试它。

    基于this answer,我将以下代码添加到我的Startup.cs

    if (env.IsDevelopment())
    {
         IdentityModelEventSource.ShowPII = true; 
    }
    

    完成此更改并重现错误后,我能够看到 kid 的实际值(而不是在我的错误消息中看到 kid: 'System.String',我看到 kid: 'ABCDEF' - 不是真正的值,但希望你明白了)。

    接下来,我将该值与 here 列出的 kid 值进行比较 - 果然,该值不存在,因此出现“无法匹配键”错误。

    就我而言,事实证明我没有从 Firebase 正确获取令牌。我正在向https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword 发出请求,但从documentation 我发现了这个:

    returnSecureToken boolean - 应该始终为真。

    我没有在我的请求中设置此属性。使用正确设置此属性时获得的令牌后,我的 C# 代码中不再出现“IDX10516:签名验证失败。无法匹配密钥”错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 2021-04-02
      • 1970-01-01
      • 2020-11-07
      • 2023-03-12
      • 2018-11-08
      相关资源
      最近更新 更多