'use client'; import { useState } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/card'; import { Button } from '@repo/ui/components/button'; import { Badge } from '@repo/ui/components/badge'; import { Alert, AlertDescription } from '@repo/ui/components/alert'; import { CheckCircle, XCircle, Loader2, ArrowRight, Key, User, Shield } from 'lucide-react'; export default function TestOidcPage() { const [testResults, setTestResults] = useState<{ discovery: 'idle' | 'loading' | 'success' | 'error'; discoveryData?: any; discoveryError?: string; }>({ discovery: 'idle', }); const testDiscoveryEndpoint = async () => { setTestResults((prev) => ({ ...prev, discovery: 'loading' })); try { const response = await fetch('http://localhost:3000/oidc/.well-known/openid_configuration'); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); } const data = await response.json(); setTestResults((prev) => ({ ...prev, discovery: 'success', discoveryData: data, })); } catch (error) { setTestResults((prev) => ({ ...prev, discovery: 'error', discoveryError: error instanceof Error ? error.message : '未知错误', })); } }; const startOidcFlow = () => { const params = new URLSearchParams({ response_type: 'code', client_id: 'demo-client', redirect_uri: 'http://localhost:3001/auth/callback', scope: 'openid profile email', state: `test-${Date.now()}`, }); window.location.href = `http://localhost:3000/oidc/auth?${params.toString()}`; }; const getStatusIcon = (status: string) => { switch (status) { case 'loading': return ; case 'success': return ; case 'error': return ; default: return
; } }; return (
{/* 页面标题 */}

OIDC 流程测试

测试和验证 OpenID Connect 认证流程的各个环节

{/* OIDC 流程步骤 */} 标准 OIDC 认证流程 按照正确的 OIDC 架构,所有登录都在 OIDC Provider 中处理 {/* 流程步骤图示 */}

用户点击登录

重定向到 Provider

返回授权码

{/* 测试按钮 */}
{/* 提示信息 */} 点击上方按钮将重定向到 OIDC Provider 的登录页面。
演示账号: demouser / demo123
{/* Discovery 端点测试 */} {getStatusIcon(testResults.discovery)} Discovery 端点测试 测试 OIDC Provider 的配置发现端点 {testResults.discovery === 'error' && ( 错误: {testResults.discoveryError} )} {testResults.discovery === 'success' && testResults.discoveryData && (
成功! OIDC Provider 配置已获取

Provider 信息

Issuer:{' '} {testResults.discoveryData.issuer}

授权端点:{' '} {testResults.discoveryData.authorization_endpoint}

令牌端点:{' '} {testResults.discoveryData.token_endpoint}

支持的功能

{testResults.discoveryData.response_types_supported?.map((type: string) => ( {type} ))}
{testResults.discoveryData.scopes_supported?.map((scope: string) => ( {scope} ))}
)}
{/* 架构说明 */} 正确的 OIDC 架构

✅ 已实现

  • • OIDC Provider 包含登录页面
  • • 标准授权码流程
  • • PKCE 支持
  • • 内置会话管理
  • • 自动令牌刷新

❌ 已移除

  • • 客户端应用的登录页面
  • • 自定义认证逻辑
  • • 重复的用户管理
  • • 混合认证流程
); }