控制台
身份验证

OAuth 应用

让服务请求对项目用户进行范围访问。

OAuth 应用转变为项目身份验证进入服务的授权服务器。登录的项目用户可以批准应用的显式范围,而无需向该应用提供用户密码或上游社交提供商令牌。

#什么是 OAuth 应用

#注册应用

在项目身份验证 UI 中,添加名称、客户端类型、主页、精确重定向 URI 和允许的范围。

客户端类型秘密PKCE
公共没有可部署的客户端密钥所需的 S256
机密令牌交换时所需的客户端密钥支持和推荐

客户端密钥仅显示一次。轮换它会撤销该应用程序的现有 OAuth 令牌。

#授权流程

GET https://api.agihalo.com/api/v1/auth/oauth/authorize
  ?client_id=halo_client_...
  &redirect_uri=https%3A%2F%2Fservice.example.com%2Fcallback
  &scope=profile%20email
  &state=opaque-client-state

GET 端点验证客户端、重定向 URI 和请求的范围,然后返回您同意 UI 的应用详细信息。用户批准后,使用项目用户访问令牌调用 POST 端点。

curl -X POST https://api.agihalo.com/api/v1/auth/oauth/authorize \
  -H "Authorization: Bearer $PROJECT_USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "halo_client_...",
    "redirect_uri": "https://service.example.com/callback",
    "scopes": ["profile", "email"],
    "state": "opaque-client-state",
    "code_challenge": "S256_CHALLENGE",
    "code_challenge_method": "S256"
  }'

响应包含 redirectTo。导航到该确切 URL,以便服务接收 code 和原始state

#令牌交换

curl -X POST https://api.agihalo.com/api/v1/auth/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "authorization_code",
    "client_id": "halo_client_...",
    "code": "halo_code_...",
    "redirect_uri": "https://service.example.com/callback",
    "code_verifier": "ORIGINAL_PKCE_VERIFIER"
  }'

机密客户端也会发送 client_secret。授权码是一次性的,与注册客户端、重定向 URI、项目用户、范围和可选的 S256 质询绑定。

POST/api/v1/auth/oauth/token

授权代码和刷新令牌授予。

#用户信息和范围

GET/api/v1/auth/oauth/userinfo

发送 OAuth 访问令牌作为不记名令牌。 HALO 在返回项目用户信息之前会验证其项目、应用、受众、令牌使用、用户状态和范围。