IdentityServer4 Yazı Serisi #8 – Authorization Code Grant(Flow)

Merhaba,

Daha önce IdentityServer4 Yazı Serisinin üçüncü makalesi olan Client Credentials başlıklı makalemizde IdentityServer4 yapılanması üzerinden client’ların yetkilendirilmesini teorik ve pratik olarak incelemiştik. Bu sekizinci makalede ise Authorization Code Grant/Flow ile kullanıcıların onayı üzerinden yetkilendirmenin nasıl yapıldığını sadece teorik bir şekilde istişare edeceğiz.

Authorization Code Grant Nedir?

Authorization Code, adı üzerinde ‘yetki kodu’dur. Yani istemcinin bir access token’ı alabilmesi için önceden gerekli olan ‘yetki’yi temsil eden koddur. Authorization code; kullanıcı tarafından kullanılan client’ın, kullanıcının Auth Server üzerinden sisteme authorize olması esnasında, client tarafından öğrenilmek ve elde edilmek istenen bilgilerin kullanıcı tarafından onaylanması neticesinde bu bilgileri barındıracak şekilde auth server tarafından üretilmiş bir koddur. Eğer Auth Server, client’a bu authorization code’u veriyorsa, client’da bu kod eşliğinde tekrar auth server’dan access token’ı(ve varsa refresh token’ı da) elde edebilecektir.

Authorization code; Auth server açısından access token üretmek için kullanıcı bilgilerinin doğruluğunun yanında ayrı bir onay/yetki manasına gelmektedir. Eğer authorization code yanlışsa, kullanıcı bilgileri doğru olsa bile access token üretilmeyecektir.

Authorization Code Akış Süreci Nasıldır?

IdentityServer4 Yazı Serisi #8 - Authorization Code Grant(Flow)Yandaki görsel authorization code’un akış sürecini en iyi temsil eden bir diyagrama sahiptir. İlk olarak burada rol alan oyunculardan bahsederek başlayalım;

  • Resource owner
    Uygulamayı kullanan kullanıcı. Kaynak sahibi.
  • User agent
    Kullanıcıya aracılık eden uygulama. Genellikle web tarayıcısıdır.
  • Authorization Server
    Token dağıtan sunucumuz.
  • Client
    Client’ın ta kendisi. Single Page Application(SPA), Mobile, Web vs. olabilir.

Şimdide süreçteki adımları ele alalım;

  • A
    Client(genellikle bir web uygulaması), user agent(genellikle bir web tarayıcısı) aracılığıyla kullanıcıyı Authorization server’a yönlendirerek süreci başlatır. Client, kullanıcıyı authorization server’a yönlendirirken, bu yönlendirme içerisinde müşteri kimliği(client identifier/username&password) ve yeniden yönlendirme uri(redirect uri) bilgisini barındırır. Auth server, gerekli doğrulama işlemi neticesinde(ki geçersiz doğrulama olsa dahi) client’ı bilgilendirmek için redirect uri’ye geri yönlendirme yapar.
  • B
    Resource owner(kullanıcı), user agent aracılığıyla authorization server’da kimlik doğrulamasını gerçekleştirir ve client’ın belli başlı bilgilerine olan erişim talebini onaylar veya reddeder.
  • C
    Resource owner erişim izni verirse, auth server tarafında bir ‘Authorization Code/Yetkilendirme Kodu’ üretilir. Ardından bu kodla birlikte auth server, user agent’ı redirect uri’de belirtilen adrese yönlendirir.
  • D
    Artık client ‘Authorization Code’a sahiptir ve bu kodu kullanarak auth server’ın token endpoint’ine access token için talepte bulunur. Tabi bu talepte bulunurken, auth server’ın kimlik doğrulama(authentication) yapabilmesi için istemci kimlik bilgileri(client credential) ve access token’ı elde edebilmesi içinde yeniden yönlendirme uri’si ilgili talebe eklenir.
  • E
    Auth server, token endpoint’ine client’tan gelen bu talep neticesinde taşınan ‘Authorization Code’u ve client credential bilgilerini doğrular ve access token’ı üretir. Ardından belirtilen redirect uri’ye ilgili access token bilgisini gönderir. Böylece client access token’ı elde ederek yetkilendirilmiş olur.

İşte tüm süreç bu şekilde cereyan etmektedir. Nihai olarak access token’ı elde eden client bu token aracılığıyla API’lara isteklerde bulunabilir.

Authorization Code Grant client’ı yetkilendirmek için, önce authorization code’u arından da access token’ı zorunlu kıldığından dolayı iki aşamalı doğrulama gerçekleştirmektedir diyebiliriz.

IdentityServer4 Framework’ü İle Authorization Code’u Nasıl Uygularız?

IdentityServer4 framework’ü Authorization Code stratejisini herhangi bir manuel kod inşa etmeye gerek kalmaksızın otomatik gerçekleştirmektedir.

Auth Server’dan tarayıcı aracılığıyla authentication code isteyebilmek için Authorize Endpoint kullanılır.

Serimizin ileriki makalelerinde Authorization Code Grant akışının pratiksel çalışmasının nasıl yapıldığını konuşuyor olacağımızdan dolayı içeriği burada noktalıyorum…

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

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. 30 Ekim 2020

    […] önceki makalede ele aldığımız Authorization Code Grant(Flow) iki aşamalı bir doğrulama süreci gerçekleştirmektedir. Implicit grant ise tek adımlı bir […]

  2. 07 Kasım 2020

    […] IdentityServer4 Yazı Serisi #8 – Authorization Code Grant(Flow) […]

Bir cevap yazın

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

*