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

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

### 1.1 `/login` (通用登录)
- **定位**: 后端服务对接、高安全性场景。
- **认证方式**: 仅支持 `identifier` + `password`。
- **安全性**: 推荐使用 **签名 (Sign)** 验证。
- **返回**: 仅返回 `ticket` (应用模式) 或 `access_token` (平台模式)。
- **适用**: 后端代理登录、OIDC 应用后端交互。
- **应用协议（提供 `app_id` 时）**: 仅 `SIMPLE_API` 与 `OIDC` 可返回 `ticket`；**`NONE`（导航）不提供票据**，应使用 `/sso-login`。

### 1.2 `/sso-login` (简易 SSO)
- **定位**: 前端浏览器直接对接、快速实现 SSO。
- **认证方式**: **优先使用 Session (Cookie / Bearer)**，如果未登录则使用 `username` + `password`。
- **安全性**: 无签名校验（依赖 HTTPS 与 Cookie 安全）。
- **返回**: `redirect_url`（`SIMPLE_API` 常含 `ticket`；`OIDC` 为 `scheme://host`；`NONE` 为导航 URL，无 ticket）。
- **适用**: SPA 前端、快捷导航。**支持 `SIMPLE_API`、`OIDC`、`NONE`**；完整 OIDC 授权码流仍走 Hydra。

## 2. 详细对比表

| 特性 | `/login` | `/sso-login` |
|---|---|---|
| **调用端** | 后端服务器 (推荐) | 前端浏览器 |
| **支持 Session 免登** | ❌ 否 | ✅ 是 (自动检测) |
| **签名验证** | ✅ 支持 | ❌ 不支持 |
| **应用协议（带 app_id）** | `SIMPLE_API` / `OIDC` 返回 ticket；`NONE` 不支持 | `SIMPLE_API` / `OIDC` / `NONE` 均返回 `redirect_url` |
| **返回值** | 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();
// 直接跳转；redirect_url 是否含 ticket 取决于应用协议（SIMPLE_API / OIDC / NONE）
window.location.href = data.redirect_url;
```
