Mengenal Claim Identity pada ASP.NET

Claim Identity ASP.NET

Pada tutorial sebelumnya terkait tutorial membuat custom login pada ASP.NET, pada akhir tutorial belum dijelaskan mengenai cara menyimpan informasi User seperti ID User, Email, Level User, Group User, dan lain sebagainya yang berhubungan dengan User.Identity sehingga informasi ini belum dapat diakses langsung seperti halnya kita memanggil fungsi User.Identity.Name untuk mendapatkan Username dari user yang login.

Dalam hal ini kita dapat menyimpan informasi User yang telah melakukan autentifikasi identity sehingga kedepannya akan memudahkan developer dalam pengembangan lebih lanjut (development) suatu aplikasi dalam skala besar.

Sedikit membahas tentang Owin, Owin adalah singkatan dari "Open Web Interface for .NET" yaitu suatu sistem yang bekerja sebagai jembatan (middleware) untuk autentifikasi identitas user antara client dengan server. Owin bekerja terpisah dengan server, dan mampu menyimpan informasi data login seperti username dan lainnya dengan aman.

Claim merupakan (bisa dikatakan) semacam session login yang disimpan dalam Owin yang dapat digunakan untuk menyimpan informasi user tanpa harus melakukan load/pengambilan data lagi dari database maupun dari session. Sama seperti session, Claim juga bersifat dinamis dan dapat diubah-ubah nilainya.

[ads id="ads1"] Perbedaan mendasar antara claim dengan session adalah pada ketersediaannya di sisi server. Sebagai contoh, jika client tidak aktif selama beberapa saat atau client menutup browser, maka session akan secara otomatis terhapus dari server sehingga kita harus membuat session baru dan sebagainya. Sedangkan claim masih tetap utuh sampai kita menghapusnya walaupun kita melakukan restart server dan menutup browser.

Untuk membuat Claim, kita membutuhkan beberapa variabel atau lebih tepatnya konstanta yang akan digunakan sebagai nilai penamaan dari Claim. Tujuan sebenarnya hanya untuk memudahkan saja dan menghindari salah ketik dalam prakteknya.
public class UserClaim
{
 public const string User_Id = "User_Id";
 public const string Fullname = "Fullname";
 public const string Email = "Email";
 public const string Phone = "Phone";
}

Konstanta diatas sebagai contoh yang digunakan untuk membuat Claim yang cara penggunaannya dapat dilihat pada contoh dibawah ini (lihat baris yang ditandai) :
private async Task SignInAsync(UserModel user, bool isPersistent)
{
 AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
 var identity = await _customUserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);

 identity.AddClaim(new Claim(UserClaim.User_Id, user.Id ?? user.Id, ClaimValueTypes.Integer));
 identity.AddClaim(new Claim(UserClaim.Fullname, user.Fullname ?? string.Empty, ClaimValueTypes.String));
 identity.AddClaim(new Claim(UserClaim.Email, user.Email ?? string.Empty, ClaimValueTypes.String));
 identity.AddClaim(new Claim(UserClaim.Phone, user.Phone ?? string.Empty, ClaimValueTypes.String));

 AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}

Bagi yang masih bingung terkait fungsi diatas, kalian dapat membacanya pada artikel sebelumnya mengenai cara membuat custom login pada ASP.NET.

Lalu langkah selanjutnya kita dapat membuat sebuah Helper yang berfungsi sebagai alat bantu untuk mengambil nilai dari claim yang sudah dibuat diatas.

using System.Security.Claims;
using System.Security.Principal;

namespace Custom_Login.Models
{
    public static class UserIdentity
    {
        public static string Get_Id(this IIdentity identity)
        {
            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
            Claim claim = claimsIdentity?.FindFirst(UserClaim.User_Id);
            return claim?.Value ?? string.Empty;
        }

        public static string Get_Fullname(this IIdentity identity)
        {
            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
            Claim claim = claimsIdentity?.FindFirst(UserClaim.Fullname);
            return claim?.Value ?? string.Empty;
        }

        public static string Get_Email(this IIdentity identity)
        {
            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
            Claim claim = claimsIdentity?.FindFirst(UserClaim.Email);
            return claim?.Value ?? string.Empty;
        }

        public static string Get_Phone(this IIdentity identity)
        {
            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;
            Claim claim = claimsIdentity?.FindFirst(UserClaim.Phone);
            return claim?.Value ?? string.Empty;
        }
    }
}
Jadi secara lengkap ketika kita ingin menggunakannya secara langsung dapat dilakukan melalui perintah HttpContext.Current.User.Identity.Get_Id() (untuk mendapatkan nilai ID User pada Claim) yang dapat dipanggil melalui View maupuan Controller.

Untuk memastikannya, kalian dapat melihat contoh berikut pada View untuk menampilkan data Claim (lihat screenshot):
if (User.Identity.IsAuthenticated)
{
 <h3>Welcome, @HttpContext.Current.User.Identity.Name</h3>
 <p>ID User : @HttpContext.Current.User.Identity.Get_Id()</p>
 <p>Username : @HttpContext.Current.User.Identity.Name</p>
 <p>Email : @HttpContext.Current.User.Identity.Get_Email()</p>
 <p>Phone : @HttpContext.Current.User.Identity.Get_Phone()</p>
}

ASP NET Login

[ads id="ads2"] Untuk yang membutuhkan source code sebagai panduan atau sekedar pembelajaran lebih lanjut, dapat kalian download di https://drive.google.com/open?id=1hoDPfg6cL3dyrV6dt5t8qNDDC_IvXvGG


0/Post a Comment/Comments

Lebih baru Lebih lama