Я пытаюсь реализовать механизм аутентификации Firebase 3 с использованием пользовательских токенов (как описано в https://firebase.google.com/docs/auth/server/create-custom-tokens).
Мой сервер - это приложение 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 от Microsoft, поэтому код выглядит следующим образом:
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);
Затем попытался войти в пользовательское приложение React Native с помощью Firebase Javascript SDK со следующим кодом:
//omitting initialization code
firebase.auth().signInWithCustomToken(firebaseJWT).catch(function(error) {
console.log('Error authenticating Firebase user. Code: ' + error.code + ' Message: ' + error.message);
});
Но у Firebase появилась ошибка:
Ошибка аутентификации пользователя Firebase. Код: auth/invalid-custom-token Сообщение: неправильный формат пользовательского токена. Пожалуйста, проверьте документацию.
Экспериментирование с добавлением различных требований к управлению истечением токена также не помогло.
Также я попытался создать токены с библиотекой "dvsekhvalnov/jose-jwt", но не смог заставить ее работать с алгоритмом "RS256".
Итак, вопрос:
Любое предложение о том, что я делаю неправильно?