PassKey'lerle Yetkilendirme

· Özellikler

WebAuthn (Web Authentication), açık anahtarlı şifreleme kullanarak güvenli, parolasız ve kimlik avına dayanıklı kimlik doğrulamayı mümkün kılan bir W3C standardıdır. Güvenliği ve kullanıcı deneyimini iyileştirmek için passkey'lerle yaygın olarak kullanılır. Ancak kullanıcıları WebAuthn ile doğrulamak yalnızca ilk adımdır. Başarılı bir kimlik doğrulamadan sonra, genellikle birden fazla API uç noktasında eylemlerini yetkilendirmeniz gerekir.

Bu makalede şunları nasıl yapacağınızı ele alacağız:

1. WebAuthn Kimlik Doğrulama Akışını Anlama

WebAuthn, açık anahtarlı şifreleme ve istemcide güvenli bir şekilde depolanan kimlik bilgileri (örneğin tarayıcıdaki veya cihazdaki passkey'ler) etrafında döner. Kimlik doğrulama akışı genellikle şu adımları içerir:

Adım 1: Kimlik Doğrulamayı Başlatın Adım 2: İstemci Tarafı Kimlik Bilgisi Onayı Adım 3: Sunucu Tarafı Doğrulama

Bu noktada, kullanıcının kim olduğunu teyit ettiniz, ancak API'lerinize erişimi yetkilendirmek için hâlâ bir yola ihtiyacınız var. 

2. WebAuthn Başarısından Sonra Bearer Token Döndürme

Başarılı bir kimlik doğrulamadan sonra sunucunun, yeni bir websocket veya HTTP bağlantısı açmak için kullanılacak bir bearer token göndermesini isterseniz token = true parametresini geçirin. Örnek:

{
"username": "alice@example.com", "token": true
}

Başarılı bir Kimlik Doğrulamadan sonra sunucu şuna benzer bir yanıt gönderir:

{
"verified": "ok",
  "authentication": {
    "token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
  }
}


Bir istek yetkilendirilmediğinde OnWebAuthnUnauthorized olayı çağrılır ve bağlantı kesilir; burada hangi uç noktaların WebAuthn Kimlik Doğrulaması gerektirdiğini ve hangilerinin gerektirmediğini yapılandırabilirsiniz.

Neden Bearer Token Kullanmalısınız?

3. Bearer Tokenı API Yetkilendirmesi için Kullanma

Yeni bir tokenınız olduğunda, bu bearer token ile bir yetkilendirme başlığı göndermeniz yeterlidir. Bearer Tokenı yapılandırmak için TsgcHTTP1Client'in CustomHeaders özelliğini kullanabilirsiniz. Örnek:

procedure GetHTTPRequest(const aURL: string; const aToken: string): string;
var
  oHTTP: TsgcHTTP1Client;
begin
  oHTTP := TsgcHTTP1Client.Create(nil);
  Try
    oHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + aToken);
    result := oHTTP.Get(aURL);
  Finally
    oHTTP.Free;
  End;
end; 

4. Uçtan Uca Akışa Genel Bakış

İşte eksiksiz üst düzey sıralama: