Sto cercando di implementare il meccanismo di autenticazione Firebase 3 utilizzando i token personalizzati (come descritto in https: // firebase.google.com/docs/auth/server/create -Custom-gettoni).Firebase 3: creazione di un token di autenticazione personalizzato utilizzando .net e C#
Il mio server è un'applicazione MVC ASP.NET.
Quindi in base alle istruzioni (https://firebase.google.com/docs/server/setup) ho creato un account di servizio per la mia applicazione Firebase e generato una chiave nel formato '.p12'.
Dopo quello secondo le istruzioni qui (https://firebase.google.com/docs/auth/server/create-custom-tokens#create_custom_tokens_using_a_third-party_jwt_library) ho provato a generare un token personalizzato e firmarlo utilizzando la chiave ricevuta nel passaggio precedente. Per la generazione di token ho usato biblioteca SystemIdentityModel.Tokens.Jwt da Microsoft, in modo che il codice è simile al seguente:
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);
poi provato ad accedere utente in Reagire applicazione nativa tramite Firebase Javascript SDK, con il seguente codice:
//omitting initialization code
firebase.auth().signInWithCustomToken(firebaseJWT).catch(function(error) {
console.log('Error authenticating Firebase user. Code: ' + error.code + ' Message: ' + error.message);
});
ma ho ottenuto un errore dal Firebase dicendo:
errore autenticazione utente Firebase. Codice: auth/invalid-custom-token Messaggio: il formato token personalizzato non è corretto. Si prega di controllare la documentazione.
Anche l'esperimento con l'aggiunta di diverse attestazioni per il controllo della scadenza dei token non è stato d'aiuto.
Inoltre, ho provato a generare token con la libreria "dvsekhvalnov/jose-jwt" ma non riesco a farlo funzionare con l'algoritmo "RS256".
Quindi la domanda:
Qualsiasi suggerimento su quello che sto facendo di sbagliato?
mi sono reso conto che il formato del token descritto dal collegamento http://stackoverflow.com/questions/37408684/is-it-still-possible-to-do-server-side-verification-of-tokens- in-firebase-3/37492640 # 37492640 è un token rilasciato da Firebase stesso, quindi la prima domanda non è più una domanda. –
Ecco la risposta dall'assistenza di Google sulla stessa domanda: ** "Ho visto il tuo post in SO, che hai già una soluzione. Per il formato di token, devi sempre seguire ciò che è sulla documentazione più recente. per quanto riguarda l'autenticazione in questo momento e stiamo facendo del nostro meglio per mantenere le cose in movimento sulla nostra estremità. Tieni d'occhio le nostre note di rilascio per ulteriori aggiornamenti, e sentiti libero di ricontrollare con noi se necessario. "** Quindi sembra che la soluzione alternativa sia l'opzione migliore per ora. –