ASP.Net Identity kullanıcılarını şifreleriyle birlikte Firebase aktarmak


Daha önce ASP.Net Identity yapısında tutulan kullanıcıları firebase’e import etmeniz gerekebilir. Bunun için AspNetUsers tablosundaki PasswordHash alanında tutulan base64 verileri bazı işlemlerden geçirerek firebase’ye göstermemiz gerekiyor. Bu işlemler sırasıyla;

 

  • Base64 olan string türündeki şifre byte dizisine dönüştürülür.
  • 49 boyutunda bir byte dizisi elde ederiz. Bu dizinin 1. byte’i 0 dır ve yok sayarız. Sonraki 16 byte salt, kalan 32 byte ise passwordHash alanına denk gelir.

Yani;

[
   1.byte, //boş
   2.byte..16.byte, //salt alanı
   17.byte..49.byte //passwordHash alanı
]

Mantığını anladıktan sonra bu işlemi yapacak olan fonksiyonu paylaşalım 🙂

public static void GetUsersAndWriteJsonFile()
{
  JArray jArray = new JArray();
  SqlConnection con = new SqlConnection("Data Source=websrv1; Initial Catalog=PlatformDB; Integrated Security=SSPI;");
  SqlCommand cmd = new SqlCommand();
  SqlDataReader dr;
  cmd.CommandText = "SELECT Id, NameSurname, Email, PasswordHash FROM AspNetUsers";
  cmd.Connection = con;
  con.Open();
  dr = cmd.ExecuteReader();
  while (dr.Read())
  {
    byte[] numArray = Convert.FromBase64String(dr["PasswordHash"].ToString());
    byte[] bsalt = new byte[16];
    Buffer.BlockCopy((Array)numArray, 1, (Array)bsalt, 0, 16);
    byte[] bhash = new byte[32];
    Buffer.BlockCopy((Array)numArray, 17, (Array)bhash, 0, 32);
    string salt = Convert.ToBase64String(bsalt);
    string passwordHash = Convert.ToBase64String(bhash);

    dynamic jo = new JObject();
    jo.localId = dr["Id"].ToString();
    jo.email = dr["Email"].ToString();
    jo.emailVerified = false;
    jo.passwordHash = passwordHash;
    jo.salt = salt;
    jo.displayName = dr["NameSurname"].ToString();
    jArray.Add(jo);
  }
  dr.Close();
  con.Close();
  dynamic jsonObject = new JObject();
  jsonObject.users = jArray;
  File.WriteAllText(@"c:\users.json", jsonObject.ToString());
}

Yukarıdaki kodu c# console uygulaması olarak açıp, connectionString bilgilerinizi değiştirip çalıştırırsanız c:\users.json dosyasını sizin için oluşturacaktır.

Son olarak firebase’e bu json dosyasını göstererek kullanıcıları yüklemek kaldı. Bunun için gerekli yüklemeleri yaparak bir firebase projesi oluşturalım.
Sırayla aşağıdaki komutları çalıştırıyoruz.

npm install -g firebase-tools
firebase login

firebase auth:import c:\users.json –hash-algo=PBKDF_SHA1 –rounds=1000

 

 

Diğer firebase komutlarını görmek için: firebase use –help
Firebase console detaylar için;
https://firebase.google.com/docs/cli/auth

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir