July 4, 2016 · serverless Auth0
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ı.
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.
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
Adım 1den aldığımız token. Bu Auth0 ile anlaşmak için gerekli. AWS SAML provider resource name arn
Oluşturmasını istediğimiz AWS token'ın hangi rolde olacağı bilgisini geçiyoruz.
Bunun sonucunda bize delegation içerisinde Credentials bilgisi döner. AccessKeyId
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.
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. 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.
APIGateway oluşturduğumuz REST API SDKsı
AWSModel ve AWS HTTP Default Client'ı
HTTP Client'an gönderilen Request'in şifrelenmesi için ilgili kodlar
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.
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.
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.
İ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 :)