我试图使用自定义令牌实现Firebase 3身份验证机制(如https:// firebase.google.com/docs/auth/server/create中所述-custom的令牌)。Firebase 3:使用.net和c创建自定义身份验证令牌#
我的服务器是ASP.NET MVC应用程序。
因此,根据说明(https://firebase.google.com/docs/server/setup),我为我的Firebase应用程序创建了一个服务帐户,并生成了一个'.p12'格式的密钥。
之后,根据此处的说明(https://firebase.google.com/docs/auth/server/create-custom-tokens#create_custom_tokens_using_a_third-party_jwt_library),我尝试生成自定义令牌并使用上一步收到的密钥对其进行签名。对于令牌生成我使用微软SystemIdentityModel.Tokens.Jwt库,所以代码如下所示:
var now = DateTime.UtcNow;
var tokenHandler = new JwtSecurityTokenHandler();
var key = new X509AsymmetricSecurityKey(new X509Certificate2(p12path, p12pwd));
var signinCredentials = new SigningCredentials(key, "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", "http://www.w3.org/2001/04/xmlenc#rsa-sha256");
Int32 nowInUnixTimestamp = (Int32)(now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
var token = tokenHandler.CreateToken(
issuer: serviceAccountEmail,
audience: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
signingCredentials: signinCredentials,
subject: new ClaimsIdentity(new Claim[]
{
new Claim("sub", serviceAccountEmail),
new Claim("iat", nowInUnixTimestamp.ToString()),
new Claim("exp", (nowInUnixTimestamp + (60*60)).ToString()),
new Claim("uid", uid)
})
);
var tokenString = tokenHandler.WriteToken(token);
然后试图使用作出反应的Javascript火力地堡SDK机应用程序,用下面的代码在用户登录:
//omitting initialization code
firebase.auth().signInWithCustomToken(firebaseJWT).catch(function(error) {
console.log('Error authenticating Firebase user. Code: ' + error.code + ' Message: ' + error.message);
});
但得到了一个错误,从火力地堡说:
错误认证火力地堡用户。代码:auth/invalid-custom-token消息:自定义令牌格式不正确。请检查文档。
尝试为令牌过期控制添加不同的声明也没有帮助。
另外我试图用“dvsekhvalnov/jose-jwt”库生成标记,但无法使用“RS256”算法得到它。
所以问题:
什么我做错了什么建议吗?
我认识到,通过该链接http://stackoverflow.com/questions/37408684/is-it-still-possible-to-do-server-side-verification-of-tokens-描述的令牌格式in-firebase-3/37492640#37492640是由Firebase本身发布的令牌,因此第一个问题不再是问题。 –
以下是Google支持同一问题的答案:**“我看到了您的帖子,因此您已经有了一个解决方法。对于令牌格式,您应该始终遵循最新文档中的内容。关于现在的身份验证,我们正在尽全力让事情继续进行下去。 请留意我们的发布说明中的任何进一步更新,如有需要请随时与我们联系。“**所以看起来像解决方法是现在最好的选择。 –