我的 Web 应用程序中的"访问客户端上的自定义声明"中显示了逻辑,其b64DecodeUnicode
实现与此处记录的相同。
在Google或电子邮件登录后,可以对ID令牌中的自定义声明进行base64解码,我可以将生成的json记录到控制台。
{"iss":"https://securetoken.google.com/my-app","name":"Joe Bloggs","picture":"https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg","aud": ... etc.
Facebook登录后,我看到错误:
Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
事实上,当我手动获取 ID 令牌的第二部分并尝试对其进行 base64 解码时,它似乎在picture
值 (url( 中?
后损坏。
解码的字符串包含如下内容:
https://lookaside.facebook.com/platform/profilepic/YLLMML͌L
但希望字符串包含:
https://lookaside.facebook.com/platform/profilepic/?asid=
在撰写本文时,我使用的是最新的Firebase(4.12.1(和firebaseui(2.7.0(软件包。
这是Firebase中的错误吗,即ID令牌是否编码不正确? 还是我的解码方法有问题? 提前感谢!
这似乎是Firebase文档问题。 当使用jwt解码来解码令牌时,事情工作正常。 深入研究 jwt 解码源代码,该行:
var output = str.replace(/-/g, "+").replace(/_/g, "/");
是在这种情况下解决问题的方法(有问题的令牌有一个"_"(。