# 统一认证平台 - 接口对比与选择

## 1. 接口对比: `/login` vs `/sso-login`

### 1.1 `/login` (通用登录)
- **定位**: 后端服务对接、高安全性场景。
- **认证方式**: 仅支持 `identifier` + `password`。
- **安全性**: 推荐使用 **签名 (Sign)** 验证。
- **返回**: 仅返回 `ticket` (应用模式) 或 `access_token` (平台模式)。
- **适用**: 后端代理登录、OIDC 应用后端交互。

### 1.2 `/sso-login` (简易 SSO)
- **定位**: 前端浏览器直接对接、快速实现 SSO。
- **认证方式**: **优先使用 Session (Cookie)**，如果未登录则使用 `username` + `password`。
- **安全性**: 无签名校验（依赖 HTTPS 和 Cookie 安全）。
- **返回**: `redirect_url` (包含 ticket)。
- **适用**: SPA 前端、需要利用平台已登录状态实现免登的场景。**仅支持 SIMPLE_API 类型应用**。

## 2. 详细对比表

| 特性 | `/login` | `/sso-login` |
|---|---|---|
| **调用端** | 后端服务器 (推荐) | 前端浏览器 |
| **支持 Session 免登** | ❌ 否 | ✅ 是 (自动检测) |
| **签名验证** | ✅ 支持 | ❌ 不支持 |
| **应用类型** | 全部 | 仅 SIMPLE_API |
| **返回值** | JSON 数据 (ticket/token) | JSON (redirect_url) |

## 3. 使用示例

### 3.1 /sso-login (前端调用)
```javascript
// 场景：用户点击“登录”，前端调用此接口
const response = await fetch('{{API_BASE_URL}}/simple/sso-login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    app_id: 'my_app_123'
    // 如果确定用户未在平台登录，可附加 username/password
    // username: '...', password: '...'
  })
});

const data = await response.json();
// 直接跳转，后端已生成好带 ticket 的 URL
window.location.href = data.redirect_url;
```

