Simpan UserToken yang dihasilkan oleh identitas ASP.Net Core untuk penyedia login eksternal

Saya menggunakan Facebook sebagai login eksternal identitas ASP.Net Core. Saya ingin, meskipun pengguna masuk dengan Facebook, pengguna tersebut mengisi profilnya di situs web. Untuk itu saya menggunakan metode ExternalLoginCallback, dimana saya ingin mendapatkan data dari Facebook seperti tanggal lahir, lokasi (negara), ...

Salah satu masalahnya adalah jika pengguna menghapus centang beberapa izin, panggilan default ke Facebook gagal:

var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
    return RedirectToAction(nameof(Login));

// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);

Saya juga perlu melakukan beberapa pemeriksaan tambahan pada data pengguna, yang memerlukan pemanggilan langsung Graph API.

Poin pemblokiran saya: - Dalam metode ExternalLoginCallback, saya perlu memisahkan 'negara' dan 'tanggal lahir' untuk menghindari API Facebook untuk mengembalikan kesalahan jika pengguna tidak memberikan izin - Untuk itu saya memerlukan pengguna access_token (dan untuk panggilan tambahan dalam metode ini), saya tidak melihat cara mendapatkannya meskipun itu digunakan oleh kerangka Identitas Facebook - Setelah profil dibuat, saya ingin mendapatkan akses ke access_token ini, yang seharusnya disimpan di tabel UserTokens (saya kira?), tetapi saya tidak dapat menemukannya di sana, tabel tersebut kosong. (DbContext saya adalah kelas yang memperluas IdentityDbContext<AppUser, AppRole, long>, tidak tahu apakah itu berdampak)

Saya telah menemukan jawaban ini https://stackoverflow.com/a/42670559/4881677 yang mungkin membantu, tetapi tidak cukup.

Ada bantuan? :)


person Jean    schedule 10.03.2017    source sumber


Jawaban (1)


Untuk menyimpan token Facebook pengguna, ia perlu menentukannya dalam opsi (tidak disimpan secara default).

var fo = new FacebookOptions();
fo.SaveTokens = true;

Dari sana kita dapat memanggil izin metode grafik untuk mendapatkan izin yang tersedia: https://graph.facebook.com/me/permissions?access_token={token}

Kemudian bisa dibaca dengan seperti ini:

foreach (var perm in data)
{
   perms.Add((string)perm["permission"], (string)perm["status"]);
}
person Jean    schedule 08.08.2017