Actix-Web Grant Kullanımı

Veli Uysal
Turkiye Rust Community
5 min readAug 17, 2023

--

Rust dilini öğrendik fakat gerçek hayat projeleri yapacağımızda bir sürü konuyu da bilmemiz gerekmektedir. Bu bilmemiz gereken konulardan birisi de Grant işlemleridir. Bu işlemlerle kullanıcı özelinde API endpointlerine yetkilendirmeler yapmamız kolaylaşmaktadır. Hazırsanız başlayalım.

API Grant kavramı

Bu kavram uygulamaların veya hizmetlerin, diğer uygulamalara veya hizmetlere API (Application Programming Interface) üzerinden erişim izni verme sürecini ifade eder. API grantleri, güvenli ve kontrollü bir şekilde farklı uygulamaların belirli API işlevlerine erişmesini sağlamak için kullanılır.

API grantleri genellikle üçüncü taraf uygulamaların veya hizmetlerin, birincil hizmet veya uygulamanın verilerine veya işlevselliğine erişmesini sağlamak amacıyla kullanılır. Bu tür izinler, kullanıcı gizliliği, güvenlik ve veri koruma açısından önemlidir. Genellikle OAuth (Open Authorization) gibi protokoller kullanılarak yönetilir. OAuth, kullanıcıların veya uygulamaların, belirli API işlevlerine sınırlı ve güvenli erişim sağlamak için kullanılan bir yetkilendirme protokolüdür. Bu protokol sayesinde, bir uygulama, kullanıcının hesap bilgilerine veya yeteneklerine erişmek istediğinde, kullanıcının onayını alarak bu erişimi güvenli bir şekilde sağlayabilir.

Özetle, API grantleri, uygulamaların veya hizmetlerin birbirlerine API üzerinden erişim izni verme ve bu erişimi kontrol etme süreçlerini ifade eder. Bu, uygulama entegrasyonlarını, üçüncü taraf servislerin entegrasyonunu ve güvenli veri paylaşımını sağlamak için kullanılır.

Actix-Web ile kendi Grant yapımız

Yukarıda yazdığım gibi daha önceden tanımlanmış bunu hizmet olarak satan üçüncü taraf uygulamalarını kullanma veya uygulamamızda kendi kodlarımızda nasıl yapabiliriz ve bunun için Actix-Web içerisinde bulunan veya geliştirici ekiplerin ayrıca geliştirdiği kütüphanelere gelin bakalım.

1. actix-web framework'ü ile API grantlerini uygulamak için actix-identity ve actix-session gibi kütüphaneleri kullanabilirsiniz. Bu kütüphaneler, kimlik doğrulama ve oturum yönetimi için işlevselliği sağlar. actix-identity kimlik doğrulama için kullanılırken, actix-session oturum yönetimi için kullanılır. İşte actix-identity ve actix-session kütüphaneleri ile basit bir API grant kodlamamız için gerekli adımlar aşağıdadır.

Öncelikle Cargo.toml dosyanıza actix-web, actix-identity ve actix-session kütüphanelerini eklemelisiniz:

[dependencies]
actix-web = "3.3"
actix-identity = "0.4"
actix-session = "0.4"

Ardından, main.rs dosyanızda aşağıdaki gibi bir örnek uygulama oluşturabilirsiniz:

use actix_identity::{CookieIdentityPolicy, IdentityService};
use actix_session::CookieSession;
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use serde::Deserialize;

#[derive(Deserialize)]
struct LoginForm {
username: String,
password: String,
}

#[get("/")]
async fn index(id: actix_identity::Identity) -> impl Responder {
if id.identity().is_some() {
HttpResponse::Ok().body("You are logged in!")
} else {
HttpResponse::Ok().body("You are not logged in.")
}
}

#[post("/login")]
async fn login(form: web::Form<LoginForm>, id: actix_identity::Identity) -> impl Responder {
// Bu örnekte basit bir kullanıcı adı ve şifre ile kimlik doğrulama yapılıyor
if form.username == "user" && form.password == "password" {
id.remember("user".to_string()); // Kimlik doğrulama başarılı, oturumu başlat
HttpResponse::Ok().body("Logged in successfully!")
} else {
HttpResponse::Unauthorized().body("Invalid credentials.")
}
}

#[get("/logout")]
async fn logout(id: actix_identity::Identity) -> impl Responder {
id.forget(); // Oturumu sonlandır
HttpResponse::Ok().body("Logged out successfully!")
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.wrap(
CookieSession::signed(&[0; 32]) // Oturum yönetimi için gizli anahtar
.secure(false), // Bu örnekte HTTPS kullanılmadığından
)
.wrap(IdentityService::new(
CookieIdentityPolicy::new(&[0; 32]) // Kimlik doğrulama için gizli anahtar
.name("auth-cookie")
.secure(false), // Bu örnekte HTTPS kullanılmadığından
))
.service(index)
.service(login)
.service(logout)
})
.bind("127.0.0.1:8080")?
.run()
.await
}

Bu örnekte, kullanıcı adı ve şifre ile kimlik doğrulama yapılıp oturum yönetimi sağlanmıştır. actix-identity ve actix-session kütüphaneleri kullanılarak oturum yönetimi ve kimlik doğrulama işlemleri yapılmıştır. CookieSession ile oturum bilgileri saklanırken, CookieIdentityPolicy ile kimlik doğrulama yapılır.

2. oauth2-rs, Rust programlama dili için geliştirilmiş bir OAuth 2.0 istemci kimlik doğrulama kütüphanesidir. OAuth 2.0, uygulamaların üçüncü taraf servislerin kaynaklarına güvenli ve yetkilendirilmiş erişim sağlamak için kullanılan bir yetkilendirme protokolüdür. oauth2-rs kütüphanesi, bu protokolü kullanarak OAuth 2.0 akışlarını kolayca uygulamak için tasarlanmıştır.

  • Bu kütüphane, Rust tabanlı uygulamaların OAuth 2.0 yetkilendirme işlemlerini basit ve güvenli bir şekilde yapabilmesini sağlar. OAuth 2.0, kimlik doğrulama işlemlerini gerçekleştirirken kullanıcı verilerini koruma ve güvenliği sağlama amacı taşır. Bu tür işlemler, API entegrasyonları, sosyal medya girişleri ve diğer senaryolar için önemlidir.
  • oauth2-rs kütüphanesi sayesinde, OAuth 2.0 yetkilendirme akışları şunları içerebilir:
  • Kimlik sağlayıcıya yönlendirme (authorization code flow)
  • İstemci kimlik doğrulama akışı (client credentials flow)
  • Yeniden yönlendirme akışı (implicit flow)
  • Parola akışı (password flow)

Kütüphane, OAuth 2.0 protokolünün karmaşıklığını azaltarak Rust geliştiricilerine istemci kimlik doğrulama işlemlerini uygulama konusunda yardımcı olur. Bu sayede kullanıcıların güvenli bir şekilde üçüncü taraf servislere erişmesini ve yetkilendirilmiş işlemler gerçekleştirmesini sağlar. Daha fazla bilgi için buraya bakabilirsiniz.

3. Keycloak, açık kaynaklı bir kimlik ve erişim yönetimi platformudur. Uygulamaların kimlik doğrulama, yetkilendirme ve kullanıcı yönetimi işlemlerini merkezi bir şekilde yönetmek için kullanılır. Bu platform, geliştiricilere ve uygulama sahiplerine güçlü ve esnek bir kimlik doğrulama altyapısı sunar.

Keycloak’un sağladığı temel özellikler şunlardır:

  • Kimlik Doğrulama ve Yetkilendirme: Keycloak, kullanıcıların kimlik doğrulama ve yetkilendirme işlemlerini kolayca yönetmelerini sağlar. OAuth 2.0 ve OpenID Connect protokollerini destekler.
  • Tek Oturum Açma (Single Sign-On — SSO): Keycloak, farklı uygulamalara aynı oturum kimlik bilgileriyle giriş yapma yeteneği sağlar. Kullanıcılar bir kez kimlik doğrulaması yaptıktan sonra diğer bağlı uygulamalara da otomatik olarak erişim sağlar.
  • Kullanıcı Yönetimi: Keycloak, kullanıcıların yönetimini sağlar. Kullanıcıları oluşturabilir, silip düzenleyebilir, gruplar oluşturabilir ve kullanıcıları bu gruplara atayabilirsiniz.
  • Veritabanı Bağımsızlığı: Keycloak, çeşitli veritabanı sistemlerini destekler ve birçok farklı veritabanı sunucusunda çalışabilir.
  • Üçüncü Taraf Kimlik Sağlayıcılarıyla Entegrasyon: Keycloak, Google, Facebook, GitHub ve diğer popüler kimlik sağlayıcıları ile entegrasyon sağlar.
  • Anlık Uygulama Kurulumu: Keycloak, yeni uygulama projelerine anlık olarak kimlik doğrulama ve yetkilendirme özellikleri eklemenize yardımcı olur.
  • Kapsamlı Kimlik Doğrulama Akışları: Keycloak, farklı kimlik doğrulama akışlarını destekler. Bu sayede farklı uygulama senaryolarına uygun güvenlik düzenlemeleri yapabilirsiniz.

Keycloak, özellikle mikro hizmet tabanlı uygulamalar, API’ler ve web uygulamaları için kullanıcı yönetimi ve kimlik doğrulama işlemlerini merkezi bir şekilde yönetmek isteyen geliştiriciler için ideal bir çözümdür. Ayrıca, güvenli kimlik doğrulama ve yetkilendirme gerektiren projelerde de kullanılabilir.

4. actix-web-grant ise actix-web framework'ünün üzerine inşa edilen bir yetkilendirme (authorization) kütüphanesidir. Bu kütüphane, OAuth 2.0 ve OpenID Connect gibi yetkilendirme protokollerini desteklemek üzere tasarlanmıştır. actix-web-grant, kullanıcıların yetkilendirilmiş erişimini yönetmek, kimlik doğrulama işlemlerini uygulamak ve oturum yönetimini sağlamak için kullanılır.

Bu kütüphane sayesinde actix-web uygulamaları, kullanıcıların kimlik doğrulama akışlarını, oturum yönetimini ve yetkilendirme işlemlerini daha kolay bir şekilde entegre edebilir. Özellikle OAuth 2.0 tabanlı kimlik doğrulama ve yetkilendirme işlemlerini basit ve güvenli bir şekilde uygulama ihtiyacını karşılar.

actix-web-grant kütüphanesi ile aşağıdaki yetenekleri uygulayabilirsiniz:

  • Kimlik doğrulama akışları (authorization code flow, implicit flow, client credentials flow, password flow gibi)
  • Oturum yönetimi ve tek oturum açma (SSO)
  • OAuth 2.0 ve OpenID Connect protokollerinin uygulanması
  • Kimlik sağlayıcılarla entegrasyon (Google, GitHub, Facebook vb.)
  • Kapsamlı yetkilendirme ve erişim kontrolleri
  • ve daha fazlası

actix-web-grant, Rust programcılarına yetkilendirme işlemlerini daha verimli bir şekilde gerçekleştirmeleri için yardımcı olur. Bu sayede geliştiriciler, güvenli ve esnek bir şekilde kimlik doğrulama ve yetkilendirme işlemlerini uygulayabilirler. Kütüphanenin dökümantasyonunu inceleyerek detaylı bilgi edinebilirsiniz.

Sosyal medya hesaplarım: Twitter | Linkedin | Github | Youtube

--

--