1
0

fix: read sub claim from PDS service auth JWT

This commit is contained in:
2026-03-22 16:46:04 +09:00
parent 770ed8ca8d
commit 3e7d32b5cc

View File

@@ -287,7 +287,7 @@ fn extract_did(headers: &HeaderMap) -> Option<String> {
return Some(token.to_string()); return Some(token.to_string());
} }
// Decode JWT payload to extract iss (issuer = caller DID) // Decode JWT payload: prefer "sub" (service auth from PDS proxy), fallback to "iss"
let parts: Vec<&str> = token.split('.').collect(); let parts: Vec<&str> = token.split('.').collect();
if parts.len() == 3 { if parts.len() == 3 {
if let Ok(decoded) = base64::Engine::decode( if let Ok(decoded) = base64::Engine::decode(
@@ -295,6 +295,10 @@ fn extract_did(headers: &HeaderMap) -> Option<String> {
parts[1], parts[1],
) { ) {
if let Ok(payload) = serde_json::from_slice::<serde_json::Value>(&decoded) { if let Ok(payload) = serde_json::from_slice::<serde_json::Value>(&decoded) {
// PDS service auth: iss=PDS DID, sub=user DID
if let Some(sub) = payload.get("sub").and_then(|v| v.as_str()) {
return Some(sub.to_string());
}
if let Some(iss) = payload.get("iss").and_then(|v| v.as_str()) { if let Some(iss) = payload.get("iss").and_then(|v| v.as_str()) {
return Some(iss.to_string()); return Some(iss.to_string());
} }