'use client' /** * * SAML 2.0 기반 SSO 로그인 요청을 시작하는 버튼 컴포넌트 * * */ import { useState } from 'react' import { Button } from '@/components/ui/button' import { toast } from '@/hooks/use-toast' import { Loader2, Shield } from 'lucide-react' import React from 'react' interface SAMLLoginButtonProps { className?: string children?: React.ReactNode variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link' | 'samsung' size?: 'default' | 'sm' | 'lg' | 'icon' } export function SAMLLoginButton({ className, children = "Knox SSO로 로그인하기", variant = "outline", size = "default" }: SAMLLoginButtonProps) { const [isLoading, setIsLoading] = useState(false) const handleSAMLLogin = async () => { try { setIsLoading(true) // API 엔드포인트를 통해 SAML AuthnRequest URL 생성 const response = await fetch('/api/auth/saml/authn-request', { method: 'GET', headers: { 'Content-Type': 'application/json', }, }) if (!response.ok) { throw new Error('Failed to create SAML AuthnRequest') } const data = await response.json() if (!data.success || !data.loginUrl) { throw new Error(data.error || 'Failed to get SAML login URL') } console.log('SAML Login URL:', data.loginUrl) // IdP로 리다이렉트 window.location.href = data.loginUrl } catch (error) { console.error('SAML Login Error:', error) toast({ title: '로그인 오류', description: 'SAML 로그인을 시작할 수 없습니다.', variant: 'destructive', }) setIsLoading(false) } } return ( ) } // 간단한 Knox SSO 버튼 (props 없이) export function KnoxSSOButton() { return ( Knox SSO (STAGE 단계) ) }