Ana içeriğe geç

Authorization header'ından Kullanıcı Bilgisini Alma

Bu script, gelen istekteki Authorization header'ını analiz ederek kullanıcı kimliğini ayıklar. Hem Basic Auth hem de JWT (Bearer) formatlarını destekler.

bilgi

Alan Seçimi: Script varsayılan olarak JWT içerisindeki iss (issuer) alanına bakar. Eğer kullanıcı adınız sub veya preferred_username alanındaysa, kod içerisindeki parsed?.iss kısmını ilgili alanla güncelleyin.

Kullanım ve Özelleştirme

  • JWT Kullanımı: Eğer kullanıcı adı iss alanında değilse, scripti ekledikten sonra ilgili alanı (parsed?.sub vb.) mutlaka değiştirin.
  • Özel Formatlar: Eğer header "Basic" veya "Bearer" kelimesi olmadan gönderiliyorsa, scripti bu özel duruma göre özelleştirmeniz gerekebilir.
  • Fallback Mekanizması: Eğer header standart formatlara uymuyorsa, güvenli bir yedek plan olarak mevcut string'in ilk 6 karakteri alınır.

Groovy Script

import java.util.Base64
import groovy.json.JsonSlurper

def auth = requestHeaderMapFromClient.get("Authorization")
def result = "unknown"

if (auth && !auth.trim().isEmpty()) {

if (auth.startsWith("Basic ")) {
try {
def base64Part = auth.length() > 6 ? auth.substring(6) : ""
def decoded = new String(Base64.decoder.decode(base64Part), "UTF-8")
result = decoded.contains(":") ? decoded.split(":")[0] : decoded
} catch (Exception e) {
result = null
}
}

else if (auth.startsWith("Bearer ")) {
def token = auth.length() > 7 ? auth.substring(7) : ""

if (token.count(".") == 2) {
try {
def payload = token.split("\\.")[1]
def json = new String(Base64.urlDecoder.decode(payload), "UTF-8")
def parsed = new JsonSlurper().parseText(json)
result = parsed?.iss
} catch (Exception e) {
result = null
}
} else {
result = token.substring(0, Math.min(6, token.length()))
}
}

else {
result = auth.substring(0, Math.min(6, auth.length()))
}
}

request_usernameOrKey = result
uyarı

Scripti ekledikten sonra, kullandığınız Identity Provider'ın (Keycloak, Auth0 vb.) JWT içindeki hangi alanı (claim) kullanıcı adı olarak döndürdüğünü kontrol etmeyi unutmayın.

Hata Durumları

  • Unknown Yanıtı: Eğer sonuç unknown olarak dönüyorsa; script çalışmıyor, header boş geliyor ya da kullanıcı bilgisi ilgili alandan çekilemiyordur.
  • Decode Hataları: Base64 çözümleme (decode) işlemi sırasında bir hata oluşursa sonuç null olarak döner.