diff --git a/backend/internal/handler/auth_handler.go b/backend/internal/handler/auth_handler.go index b69353ff..04f43879 100644 --- a/backend/internal/handler/auth_handler.go +++ b/backend/internal/handler/auth_handler.go @@ -3184,6 +3184,7 @@ type linkedRpSummary struct { ID string `json:"id"` Name string `json:"name"` Logo string `json:"logo,omitempty"` + URL string `json:"url,omitempty"` // Added LastAuthenticatedAt string `json:"lastAuthenticatedAt,omitempty"` Status string `json:"status"` Scopes []string `json:"scopes,omitempty"` @@ -3246,6 +3247,14 @@ func (h *AuthHandler) ListLinkedRps(c *fiber.Ctx) error { name = clientID } + // ClientURI가 없으면 RedirectURIs에서 호스트 부분만 추출하여 URL로 사용 (Fallback) + clientURL := strings.TrimSpace(client.ClientURI) + if clientURL == "" && len(client.RedirectURIs) > 0 { + if parsed, err := url.Parse(client.RedirectURIs[0]); err == nil { + clientURL = fmt.Sprintf("%s://%s", parsed.Scheme, parsed.Host) + } + } + lastAuth := time.Time{} if session.AuthenticatedAt != nil { lastAuth = *session.AuthenticatedAt @@ -3267,6 +3276,7 @@ func (h *AuthHandler) ListLinkedRps(c *fiber.Ctx) error { ID: clientID, Name: name, Logo: extractHydraClientLogo(client.Metadata), + URL: clientURL, Status: hydraClientStatus(client.Metadata), Scopes: scopes, }, @@ -3281,6 +3291,9 @@ func (h *AuthHandler) ListLinkedRps(c *fiber.Ctx) error { if existing.Logo == "" { existing.Logo = extractHydraClientLogo(client.Metadata) } + if existing.URL == "" { + existing.URL = clientURL + } existing.Scopes = mergeScopes(existing.Scopes, scopes) if lastAuth.After(existing.lastAuth) { existing.lastAuth = lastAuth diff --git a/backend/internal/service/hydra_admin_service.go b/backend/internal/service/hydra_admin_service.go index 9a19d1e5..88a13996 100644 --- a/backend/internal/service/hydra_admin_service.go +++ b/backend/internal/service/hydra_admin_service.go @@ -28,7 +28,8 @@ type HydraAdminService struct { type HydraClient struct { ClientID string `json:"client_id"` ClientName string `json:"client_name,omitempty"` - ClientSecret string `json:"client_secret,omitempty"` // Added + ClientSecret string `json:"client_secret,omitempty"` + ClientURI string `json:"client_uri,omitempty"` // Added RedirectURIs []string `json:"redirect_uris,omitempty"` GrantTypes []string `json:"grant_types,omitempty"` ResponseTypes []string `json:"response_types,omitempty"`