【发布时间】:2017-02-17 17:02:52
【问题描述】:
正在处理使用 Firebase 进行一些数据存储的项目,我们的客户要求使用 C#.NET 实现服务器。我们正在服务器上设置 REST 端点,以便客户端能够出于一些目的与其通信(例如,触发只能在服务器上运行的算法)。
Firebase 建议我们通过 ID 令牌识别用户,如下所述:https://firebase.google.com/docs/auth/server/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library
由于没有支持令牌身份验证的官方 .NET Firebase 服务器 SDK,我们采用了第 3 方 JWT 库来执行此操作:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet
如 Firebase 文档中所述,我们首先生成一个向服务器发送令牌。检查令牌中的几个不同字段后,我们使用kid 字段从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 获取公钥
我们一直在研究文档和 StackOverflow 很长时间,但我们找不到使用此公钥的方法,如 Firebase 文档所述:
最后,确保 ID 令牌由与令牌的 Kid 声明对应的私钥签名。从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com 获取公钥并使用 JWT 库来验证签名。
Firebase 文档并没有对此提供任何解释,我们正在使用的库的文档也没有提供任何解释。因此,当我们得到的只是公钥时,我们甚至无法获得关于如何验证令牌是否由私钥签名的基本概念。
验证令牌是否确实由正确的私钥签名的最佳方法是什么?
【问题讨论】:
标签: c# firebase jwt firebase-authentication