Spring OAuth 2.0 Tanıma

Ferhat Aykan
2 min readJun 29, 2020

--

Spring OAuth 2.0 authorization third-party uygulamalar erişimi veya kullanıcıların HTTP servis ile uygulamalarımıza limitli erişim yapabilmemizi sağlayan frameworktur.

Spring Security’de ise kullanıcı client aracılığıyla server’da sınırlanmış bir resource’e istekte bulunur ve server authenticated olup olmadığı kontrol eder eğer authenticated olmadıysa kullanıcıyı login sayfasına yönlendirir. Kullanıcı login olduktan sonra resource’e erişim sağlanır.

Kullanıcılar third-party uygulamaları kullanarak kendi resource’lerini(email, friends, age, name) paylaşmak istiyor. Third-party uygulamalar da kullanıcın izin verdiği bilgileri alıp saklamak istiyor. Kullanıcın verdiği izin kadar erişimin sınırlandırılmasında Spring OAuth 2.0 bize yardımcı olacaktır.

Spring OAuth yazımızda bolca kullanacağımız terimleri açıklarsak:

  • Resource owner
    Korunan bir resource erişim izini verecek kullanıcı.
  • Resource server
    Korunan kaynağın tutulduğu alan, erişim yetkilerine göre kullanıcılardan gelen isteklere yanıtlar dönen server.
  • Client
    Kullanıcı adına resource talepleri yapan uygulama.
  • Authorization Server
    Kullanıcının yetkilendirilmesini sağlayan server.

Authorization Grant

Kullanıcıların resource’e erişebilmesi için bir token’a ihtiyacı var ve bu token’uda alabilmek için dört çeşit grant type’mız var.

  • Authorization Code
    Kullanıcı client aracılığıyla resource erişmek ister. Token’a sahip olmayan kullanıcı Resource Server’den access denied alır ve Authorization Server’ın login sayfasına yönlendirir. Kullanıcı login olduktan sonra yetkilendirme ekranı çıkar. Bu ekranda Client’ın erişmek istediği alanlar kabul ediyor musunuz sorusu sorulur. Kullanıcı kabul ederse Authorization Server bir code döner. Bu code’u client kullanarak token alır.
  • Implicit (Deprecated)
    Authorization code’dan farkı kullanıcı login olduğunda Authorization Server client’a direk token’u verir. Bunun artısı authorization code gibi bir çok aşaması olmadığından daha verimlidir. Authorization Server client’a refresh token’u vermez.
  • Password Credentials
    Kullanıcı client tarafında login sayfasından username ve password bilgilerini girer ve Authorization Server’a client aracılığıyla bu bilgiler iletir. Authorization Server girilen bilgileri doğrular ve token döner. Bu çok güvenilir client uygulamalar için tercih edilebilir.
  • Client Credentials
    Client kullanıcıya ekranda göstereceği seçenekleri bazen Resource’den alması bazen de kendi aralarında data alışverişi yapması gerekiyor. Client’ın kendine ait bilgilerle Authorization Server’dan token alır. Bu token ile Resource Server’a ulaşarak izin verilen resource’e erişebilir.

Refresh Token
Bazen token’umuz expire olabilir. Kullanıcı client aracılığıyla Resource Server’dan istediği datayı çekmeye çalışırken geçersiz token hatası alır. Client bu hatayı handle edip Authorization Server’a ilk kullanıcı login olduğunda aldığı refresh token bilgisiyle yeni token talebinde bulunur. Bu şekilde yeniden erişim sağlayabilir.

Java Key Store
Authorization Server uygulamamızda token oluşturken java key store(jks) kullanacağız. Bizim için bir public birde secret key oluşturacak. Token oluştururken ve oluşturulan token geldiği zaman doğrulamak için kullanacağız.

Java Key Store oluşturmak için:

keytool -genkey -v -keystore auth-service.keystore -alias auth-service -keyalg RSA -keysize 2048 -validity 10000

komutunu kullanacağız.

Bir sonraki yazımızda Authorization Server tanımlamasına geçiyoruz.

İyi çalışmalar.

--

--