Microservice Mimarisinde API Gateway ile Authentication ve Authorization

  • Authentication (AuthN): Bir kullanıcının söylediği kişi olup olmadığını doğrulamakla ilgilidir.
  • Authorization (AuthZ): Yetki, ayrıcalık ve bir kullanıcının kimliğini doğruladıktan sonra hangi kaynaklara erişmesine izin verildiğini doğrulamakla ilgilidir.

Microservice Mimarisinde Authentication ve Authorization

Authentication Gateway

JSON WEB TOKEN (JWT)

header.payload.signature
{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "Gökhan",
"role": Admin,
"iss": http://abc.com,
"iat": 1472033308,
"exp": 1472034208
}
HMACSHA256(  
base64UrlEncode(header) + "." +
base64UrlEncode(payload), secret)
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjQifQ.
-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM
Login Senaryosu
  • Client login olmak için credential bilgilerini içeren request atar.
  • Gelen request Api Gateway aracılığıyla Authentication Service’e ulaştırılır ve credential bilgileri doğrulanır.
  • Kullanıcı bilgileri doğruysa JWT token oluşturulur ve bu token authorization bilgisi,expireTime gibi bilgilerle birlikte cevap olarak dönülür.
  • Cevap olarak client’a gönderilecek bilgiler, daha sonra validate ve authenticate işlemi yapılabilmesi adına API Gateway’in cache’ine yazılır. Böylece gelecek herhangi bir request tekrar authentication servisine gitmeye gerek kalmadan Authentication Gateway diye adlandırabileceğimiz Api Gateway üzerinde authenticate edilebilir.
Role bazlı Authorization
  • Her servis endpoint’ne belirli permission’lar atanır. Böylece yetki dağılımı yapılır.
  • Bir microservice bir istek aldığında, JWT token’ı encode eder.
  • JWT token validate edilir ve doğrulanır.
  • Ardından kullanıcının istenen eylem için gerekli permission’a sahip olup olmadığı encode edilmiş JWT’nin payload kısmında bulunan rolü aracılığıyla kontrol edilir.
  • İşlemi gerçekleştiren kullanıcı, istek attığı end-point’te işlem yapabilmesi için gerekli role sahip bir kullanıcı ise işlem gerçekleşir.

--

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

More from Medium

Microservices Part I

Migrate On-Prem Web app (.NET Core, Angular and Postgres) — to AWS Serverless

Integration Testing

Microservice