OAuth2 Basit Anlatım

OAuth2 yetkilendirme işlemleri için kullanılan standartlaşmış bir protokoldür. OAuth2 versiyonu 2006 yılında ortaya çıkmış olan orijinal OAuth protokolünün yerine geçmiştir.

OAuth2 kullanarak kullanıcıdan, hesabının tamamına ya da belli bir kısmına erişmek için yetki alıp bunu kendi uygulamanızda kullanabilirsiniz. Bunun ön yaygın örnekleri Facebook, Twitter, Google hesabınız ile başka uygulamalara ya da web sitelerine giriş yapabilmenizdir.

OAuth2 Protokol Akışı

Client (Uygulama)

Client kullanıcının hesabına erişmeye çalışan uygulamadır. Hesaba erişebilmek için kullanıcıdan izin alması gerekir.

Resource Server/API (İçerik Sunucusu)

Resource Server (İçerik Sunucusu) kullanıcının bilgilerine erişmek için kullanılan API sunucusudur.

Authorization Server (Yetkilendirme Sunucusu)

Kullanıcının isteği onayladığı ya da reddettiği arayüzü sağlayan sunucudur. Küçük çaplı uygulamalarda bu API sunucusu ile aynı sunucu olabilir fakat büyük ölçekli uygulamalarda genellikle ayrı bir bileşen olarak oluşturulur.

Resource Owner (Kullanıcı)

Resource owner hesabının belli kısımlarına erişmenize izin veren kullanıcıdır.

Uygulama Kaydı

Yetkilendirme işlemi yapabilmemiz için önce uygulamamızı kayıt ettirmemiz gerekir. Yetkilendirme (authorization) sunucusu sadece önceden kayıt edilmiş uygulamalardan gelen isteklere cevap verecektir. Uygulamamızı kayıt ederken uygulama ismi, açıklaması, logosu gibi bilgileri gireriz, bunlar opsiyoneldir. Fakat her uygulamada bulunması gereken bilgiler vardır. Bunlar; Redirect (Yönlendirme) URI, Client ID ve Client Secret.

Redirect (Yönlendirme) URIı

Yetkilendirme (authorization) sunucusu, kullanıcıyı, kullanıcının izin verme işleminden sonra yalnızca uygulamanın sistemde kayıtlı yönlendirme adresine yönlendirir.

Client ID

Uygulama sisteme kayıt edildikten sonra, sunucunun her uygulama için özel olarak vermiş olduğu ID değeridir. Client ID yetkilendirme (authorization) sunucusunun uygulamayı tanımlayabilmesi için kullanılır. Client ID ayrıca kullanıcıdan izin almak için kullanılacak URL oluşturmak için de kullanılır.

Client Secret

Uygulama sisteme kayıt edildikten sonra, sunucunun her uygulama için özel olarak vermiş olduğu secret değeridir. Bu secret değeri gizli tutulmalıdır.

## Yetkilendirme (Authorization) Yukarıda da belirttiğimiz üzere OAuth 2 işleminin ilk adımı kullanıcıdan yetki almaktır. OAuth 2 ile kullanabileceğiniz birkaç izin tipi (grant type) bulunur. Bu izin tipleri aşağıda listelenmiştir

Grant Type: Authorization Code Örnek Akış

Adım 1: Authorization Code Linki Önce kullanıcıya yetki verebilmesi için bir link oluşturalım.

<https://api.orneksite.com/oauth/authorize?responsetype=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&scope=read>

Yukarıdaki link ne anlama geliyor onu açıklayalım

Adım 2: Kullanıcının Uygulamaya İzin Vermesi Kullanıcı yukarıdaki linki tıkladıktan sonra, servis tarafından uygulamaya izin vermesi karşısına bir arayüz çıkartılır

OAuth 2 İzin Ekranı

Adım 3: Uygulama Authorization Code Elde Eder

Eğer kullanıcı Kabul et butonuna tıklarsa, servis kullanıcı uygulamanın sistemde kayıtlı yönlendirme adresine yönlendirir.

<https://ornekuygulama.com/yonlendir?code=**AUTHORIZATION_CODE**>

Adım 4: Uygulama Access Token İsteğinde bulunur

Uygulama access token almak için servise uygulama detaylarıyla beraber bir POST isteği gönderir

<https://api.orneksite.com/oauth/token?client_id=**CLIENT_ID**&client_secret=**CLIENT_SECRET**&grant_type=authorization_code&code=**AUTHORIZATION_CODE**&redirect_uri=**REDIRECT_URL**>

Adım 5: Uygulama Acces Token Elde Eder

Eğer uygulamanın gönderdiği bilgiler geçerli ise, servis uygulamaya bir access token gönderir.

{

“access_token”:”RsT5OjbzRn430zqMLgV3Ia”,

“expires_in”:3600

}

Eğer uygulamanın gönderdiği bilgiler geçerli değilse, servis uygulamaya hata mesajı gönderir.

{

“error”:”invalid_request”

}

Grant Type: Password Örnek Akış

Kullanıcı bilgilerini uygulamaya girdikten sonra, uygulama bu bilgileri kullanarak servise POST isteği gönderir. Eğer bilgiler geçerli ise servis uygulamaya access token gönderir.

<https://api.orneksite.com/token?grant_type=password&username=**USERNAME**&password=**PASSWORD**&client_id=**CLIENT_ID**>

Grant Type: Client Credentials Örnek Akış

Uygulama kendi Client ID ve Client Secret bilgilerini POST metodu ile servise gönderir. Eğer bu bilgiler geçerli ise servis uygulamaya bir access token gönderir

<https://api.orneksite.com/token?grant_type=client_credentials&client_id=**CLIENT_ID**&client_secret=**CLIENT_SECRET**>

Yetkilendirilmiş İstek Yapmak

Uygulama access token elde ettikten sora, bu tokeni kullanarak kullanıcının adına istekte bulunabilir. Curl kullanarak aşağıdaki gibi bir istek yapabilirsiniz

curl -G “Authorization: Bearer **ACCES_TOKEN**” \ “<https://api.orneksite.com/1/profile”>