July 4, 2016 · serverless Auth0

Serverless WebApp'de Kimlik Doğrulama ve Yetkilendirme

Geçen gün yazdığım Serverless WebApp with Auth0 'da tüm bir altyapıyı nasıl kurulacağını anlatan resimleri adım adım eklemiştim.

Bu yazıda ise Client/İstemci (Web, iOS, Android) tarafında yapılan kimlik doğrulama ve yetkilendimenin mantığını anlatacağım. Web üzerinden göstereceğim örneklemeler iOS ve Android tarafında da aynı.

Auth0 Mechanism

1nci Adım (User Login in)

Kullanıcı sisteme kimlik doğrulayarak giriş yapar. Bunun için Sosyal Medya hesaplarını veya uygulama içerisindeki kullanıcı bilgisi ve şifresini kullanarak sisteme giriş yapar.

Bunun sonucunda Auth0'dan JWT(Json Web Token) ve profil bilgileri geriye döner. Auth0 kullanmak yerine Cognito, Passport.js veya kendi yazacağınız bir Authorization mekanizması ile buradan kimlik doğrulamasını gerçekleştirebilirsiniz.

auth.signin metodu ile birlikte çağrılan login işlemi sonucunun başarılı olması durumunda sunucudan(Auth0) dan szin sisteminize alttakı resmin sağ kısmında görmüş olduğunuz token ve profile bilgisine erişebilirsiniz.

Auth0_1

2nci Adım (AWS Token Oluşturma)

İlk yaptığımız kimlik doğrulama işlemiydi. Bu ise APIGateway belli bir rol üzerinden erişebilmek için AWS'ye Token oluşturma işlemi. Bu işlem için yine Auth0 gideceğiz ama Auth0 bizi AWS delegate ederek Amazon'un Token oluşturmasını sağlayacak.

auth.getToken metodunu parametre olarak

Auth0_2

Bunun sonucunda bize delegation içerisinde Credentials bilgisi döner.

Auth0_3

dan oluşan Credentials bilgisidir. Aynı zamanda Auth0 ile gerçekleştirdiğimiz bu iki adımın logunu Auth0 Dashboard/Logs altından görüntüleyebilirsiniz.

Auth0_Logs

3ncü Adım (AWS Token ile APIGateway Çağırma)

Bu kısım APIGateway'den ürettiğimiz Client SDK'ları üzerinden konuşmamız daha doğru. API'yi deploy ettikten sonra istenilen Client ile ilgili SDK oluşturabiliriz.

Auth0_SDKGen

Bu SDK'nın içerisinden IOS,Android ve JS kodları olacak şekilde aşağıdaki autogenerated kod parçaları çıkar. Bu kodları ilgili Client projenize ekleyerek uygulamalarınızda kullanabilirsiniz.

Auth0_SDKs

Karmaşıklık olmaması açısından sadece Javascript'den yapılan Authorized request/response'un nasıl yapıldığını göstereceğim. Bu kısımda oluşturacağımız HTTPRequest'ınde Authorization ve Session Token kısmının dolu gitmesi gerekmektedir. Aşağıdaki resimde purchase metodu çağrılırken bu header değerlerinin atandığını görebilirsiniz.

Auth0_Req/Resp

Bu işlemin koddaki karşılığı için Secure bir HTTPClient oluşturmak gerekiyor. Bu client'a sigV4Client.js Bu client oluşurken 2nci adımda elde ettiğimiz Credential's bu client veriyoruzki yukarıdaki resimdeki Authorize RequestHeader oluşturabilsin.

Auth0_SecureClient

4ncü Adım (APIGateway'ın AWSToken'ı ilgili Rol için Doğrulaması)

Bu kısım daha çok APIGateway ile ilgili olduğu için Amazon tarafından bahsetmek lazım biraz daha. APIGateway'deki metodun Authorization kısmı AWS_IAM seçili olmalı. Bu API call'ı yaparken yetkilendirmeyi Amazon IAM üzerinden yapacağını belirtiyor.

Auth0_APIGateway_IAM

2nci bir konuda /pets/purchase path'ından sorumlu bir Rol'un IAM içerisinde tanımlanmış olması gerekiyorki o Path için IAM sorgu attığında hangi Rol için geçerli olduğu bilgisini 4ncü adımda amazon alabilsin. Social Api Role'une tanımlanmış policy ve Trust Relations'da ilgili SAML Provider set edildiğini görebilirsiniz.

Auth0_APIGateway_IAMRole

İlgili APICall yapıldığında APIGateway doğrulama için IAM gidecek ve istediği configurasyonları bulduğunda, kendi oluşturduğu Token'la uyuştuğunda APICall'ın arkasındaki Lambda fonksiyonunu çağırmaya izin verecektir.

Arkasındaki mantığı anlatabildiğimi düşünüyorum :)

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket
Comments powered by Disqus