# Kylin Auth

Kylin 认证授权包 — 登录/登出/Token/验证码，符合等保 2.0 身份鉴别要求。

## 功能特性

- **多方式登录**：邮箱、手机号、用户名
- **Sanctum Token**：API 令牌认证，支持过期 + 刷新
- **验证码**：图形验证码（防暴力破解）、短信验证码
- **JWT 支持**：无状态 Token 认证（可选）
- **登录日志**：记录登录时间、IP、设备信息
- **多设备管理**：查看和管理已登录设备
- **密码重置**：邮件/短信重置密码
- **密码策略**：复杂度校验、定期过期、Bcrypt 哈希存储
- **登录安全**：失败锁定、会话超时、验证码防护

## 安装

```bash
composer require kylin/auth
```

## 配置发布

```bash
php artisan vendor:publish --tag=kylin-auth-config
```

## 配置说明

```php
// config/kylin-auth.php
return [
    'password' => [
        'min_length' => 8,           // 最小长度
        'require_uppercase' => true, // 需要大写字母
        'require_lowercase' => true, // 需要小写字母
        'require_numbers' => true,   // 需要数字
        'require_special_chars' => true, // 需要特殊字符
        'max_age_days' => 90,        // 密码最长有效期（天）
    ],
    'login_security' => [
        'max_attempts' => 5,         // 最大失败次数
        'lockout_minutes' => 30,     // 锁定时间（分钟）
        'session_lifetime' => 120,   // 会话超时（分钟）
        'captcha_after_attempts' => 3, // 失败 N 次后需验证码
    ],
    'token' => [
        'expiration' => 60,          // Token 过期（分钟）
        'refresh_ttl' => 20160,      // 刷新有效期（分钟，14天）
    ],
];
```

## 使用示例

### Facade

```php
use Kylin\Auth\Facades\KylinAuth;

// 登录
$result = KylinAuth::login([
    'email' => 'user@example.com',
    'password' => 'password',
]);

// 返回 Token
$token = $result['token'];

// 登出
KylinAuth::logout($token);

// 获取当前用户
$user = KylinAuth::user($token);
```

### API 路由

| 方法 | 路径 | 说明 | 认证 |
|------|------|------|------|
| POST | /api/kylin/auth/login | 登录 | 无需 |
| POST | /api/kylin/auth/logout | 登出 | 需要 |
| POST | /api/kylin/auth/refresh | 刷新 Token | 需要 |
| POST | /api/kylin/auth/password/reset | 重置密码 | 无需 |
| GET  | /api/kylin/auth/me | 当前用户信息 | 需要 |
| POST | /api/kylin/auth/register | 注册 | 无需 |

### 中间件

```php
Route::middleware('auth:sanctum')->group(function () {
    // 需要 Token 认证的路由
});
```

### 密码复杂度校验

注册时自动校验密码是否符合复杂度要求：

```php
// 密码必须满足：长度 >= 8、含大写字母、小写字母、数字、特殊字符
// 不满足时将返回 BusinessException
```

## 法律合规

详见 [LEGAL.md](./LEGAL.md)，涵盖：
- 等保 2.0 (GB/T 22239-2019) — 身份鉴别
- 《中华人民共和国网络安全法》(2017.6.1)
- 《中华人民共和国个人信息保护法》(2021.11.1)
- 《中华人民共和国密码法》(2020.1.1)
- 《中华人民共和国数据安全法》(2021.9.1)
- 《信息安全技术 个人信息安全规范》(GB/T 35273-2020)

## 依赖

- PHP ^8.5
- Laravel ^13.0
- laravel/sanctum ^4.0
- kylin/core
- kylin/user

## 许可证

私有软件，未经授权禁止使用。