Web Api Authorization İşlemleri

Authorization bizim rolleme mekanizması kurmamızı sağlar yani hangi tip kullanıcı hangi isteklere erişebilsin gibi kontrolleri sağllar.
Biz daha önce Database’imizde Users tablomuzda 2 kullanıcı oluşturup Role Sütununa birine U (User) diğerine A (Admin) değişkenlerini tanımlamıştık

I.Daha önce oturum işlemleri için [Authorize] attribute’unu kulllanmıştık, Rolleme yapmak için kendi Authorize attribute’unu kendim yazmam gerekiyor yani bir CustomAuthorize yazacağız. Bu Class içerisindeki OnAuthorization methodunu override edeceğiz
Security SağTık>Add>Class : APIAuthorizeAttribute.cs isminde bir Class ekledik AuthorizeAttribute’den miras aldık.

public override void OnAuthorization(HttpActionContext actionContext)
			{
				base.OnAuthorization(actionContext);	//Buraya bir breakpoint koyalım (OnAuthorization methoduna düşüyor muyuz? Test için)
			}

II. Artık Authorize Attribute’unu değil de kendi yazdığımız Attribute’u kullanmak istiyoruz bunun için ilgili Method ya da Controller’a gidip [Authorize] yerine [APIAuthorize] yazdık.

			[APIAuthorize]
			public IHttpActionResult Get()
			{
			....
			}

III. Bu işlemlerden OnAuthorization methodumuza düşüyor muyuz kontrol edelim OnAuthorization’a bir breakpoint atıp, Fiddler’a gidip userKey’i database’deki user key vererek get methodunu çağıralım

Fiddler>Composer tabı > https://localhost:44366/api/languages ve body kısmına apiKey: da8a2494-bc58-443c-8c94-b805c84b3a3c yazıp çağırdık

IV. İlgili Controller ya da Controller’ımızdaki Methoda’a geçip [APIAuthorize] yerine [APIAuthorize(Roles =”A”)] yani seni sadece Admin çalıştırabilir dedik aynı şekilde hem admin hem user için [APIAuthorize(Roles =”A,U”)] ‘da diyebiiliriz

[APIAuthorize(Roles ="A")]
        public IHttpActionResult Get()
        {
		...
		}

V. Şimdi rolleri karşı tarafta yani APIAuthorize.cs’de yakalamalıyız ama ondan önce Rolleme işlemi için UsersDAL’dan ilgili User’ın verilerini çekmeliyiz

ProjectDbWebServicesDAL/UsersDAL.cs’e gidip GetUserById(string Name) methodunu yazdık buna göre gönderdiğimiz Name’li User’ı bulup tüm bilgilerini döndürecek

public Users GetUserByName(string name)
			{
				return db.Users.FirstOrDefault(x => x.Name == name);
			}

VI.APIAuthorize’a gidelim [APIAuthorize(Roles =”A”)] ‘den gelen methoddaki bilgiye göre User’ı çağıralım Role’ü o method için uygun mu onu kontrol edelim

public class APIAuthorizeAttribute : AuthorizeAttribute
		{
			public override void OnAuthorization(HttpActionContext actionContext)
			{
				var actionRoles = Roles;																								//Roles'den gelen veriyi al örneğin U geldi ya da A,U geldi gibi
				var userName = HttpContext.Current.User.Identity.Name;										//Oturum açan kullanıcının Name'ini al
				UsersDAL usersDAL = new UsersDAL();																		//Name'i Db'den sorgulatmak için UsersDAL'dan instance üret
				var user = usersDAL.GetUserByName(userName);													//Oturum açan kullanıcının Name'ini sorgulayarak User bilgilerini al user değişkenine ata
				if (user!=null && actionRoles.Contains(user.Role))													//Eğer oturumu açan kullanıcı null değil ve Roles'ten gelen (actionRoles) db'den sorguladığımız user objesindeki Role'e eşitse birşey yapma (default isteği döndürür)
				{
	
				}
				else
				{
					actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);			//Değilse Unauthorized şeklinde cevap gönder.
				}
			}
		}

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑

WordPress.com ile böyle bir site tasarlayın
Başlayın