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ı
issalanında değilse, scripti ekledikten sonra ilgili alanı (parsed?.subvb.) 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.