IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API’lerle Haberleşme

Merhaba,

Bir önceki Merkezi Üyelik Sistemi – Claim ve Authentication Propertyleri Okuma başlıklı makalemizde IdentityServer4 mimarisinden claim bilgileri ile birlikte access token, refresh token gibi değerlerin nasıl alındığını incelemiştik. Bu içeriğimizde ise client tarafından elde edilen access token ile IdentityServer4 tarafından korunan API’lara nasıl erişilebildiğini inceleyeceğiz.

Client’a Scope(Erişim Yetkisi) Verme?

Client, her ne kadar access token bilgisini elinde barındırıyor olsada erişmek istediği API’ın ‘Scope’larını da barındırması gerekmektedir. Misal; ‘GarantiAPI’ isimli API’a erişmek istediğimizi varsayalım.
IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle HaberleşmeGörüldüğü üzere ilgili API’ı IdentityServer’da temsil eden ‘ApiResource’ nesnesindeki ‘Scopes’ koleksiyonunda API’ın erişim yetkileri tanımlanmıştır. Dolayısıyla bu yetkilerin ‘Config.cs’de geliştirilen client’ta(OnlineBankamatik) da tanımlanması gerekmektedir.
 
 
Şöyle ki;
IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle Haberleşme
Bu işlemden sonra client tarafından istenilen scope’lar(yetkiler) birde ilgili client uygulamasının ‘Startup.cs’ dosyasında da bildirilmelidir.
IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle Haberleşme
Client uygulamasında bu işlemi yapmamızın sebebi, IdentityServer’da(Auth Server) kendisine dair oluşturulmuş client’ta bu scope değerleri tanımlanmış olup olmamasını check etmesidir. Aksi taktirde, IdentityServer tarafında tanımlı olan client’a verilmeyen bir scope değeri, client tarafından talep edilirse hata meydana gelecektir.

Yapılan bu konfigürasyonlardan sonra artık uygulamayı test edebiliriz.

Test Edelim

Test için öncelikle client tarafından giriş yapılmalı ve ardından bu ayarlarda(yani belirtilen scope değerlerinde) yetkileri barındıran access token elde edilmelidir.
IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle HaberleşmeEvet, access token’ı elde ettiğimize göre artık testimize başlayabiliriz.

Postman İle Test

IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle Haberleşme
Access token ile Postman üzerinden yapılan istek neticesinde görüldüğü üzere başarıyla authorized olunmakta ve haberleşme sağlanmaktadır.

Client Uygulaması İle Test

Client uygulaması üzerinden access token’ı kullanarak API ile haberleşmek istiyorsanız eğer aşağıdaki gibi bir çalışma sergileyebilirsiniz;

        [Authorize]
        public async Task<IActionResult> OdemeYap()
        {
            var authenticationProperties = (await HttpContext.AuthenticateAsync()).Properties.Items;
            string accessToken = authenticationProperties.FirstOrDefault(x => x.Key == ".Token.access_token").Value;

            HttpClient httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
            HttpResponseMessage responseMessage = await httpClient.GetAsync("https://localhost:2000/api/garantibank/bakiye/3");
            string bakiye = await responseMessage.Content.ReadAsStringAsync();

            ViewBag.Bakiye = bakiye;
            return View();
        }

IdentityServer4 Yazı Serisi #13 – Merkezi Üyelik Sistemi – Access Token İle API'lerle Haberleşme

Görüldüğü üzere her iki testimizde başarıyla sonuçlanmıştır.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Not : Örnek çalışma dosyasını indirmek için buraya tıklayınız.

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 12 Kasım 2020

    […] Yazı Serisinin bir önceki Merkezi Üyelik Sistemi – Access Token İle API’lerle Haberleşme başlıklı makalemizde IdentityServer’dan elde edilen access token ile API’lara nasıl […]

Bir cevap yazın

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

*