保护你的 API
如果你不需要灵活、细粒度的访问控制策略,你可以直接保护你的 API。我们将通过一个序列图和必要的步骤向你展示如何将访问控制集成到你的应用中。
在本教程中
- Logto 端点:
https://tenant-id.logto.app
- 客户端应用:
https://client.example.org
- API 资源服务器:
https://resource-server.com/api
在实现时,你应该用你的实际端点替换这些。
认证请求 (Authentication request)
在 认证请求 中提供资源指示器参数的列表。它将指示用户可能请求的所有受保护资源。
GET https://tenant-id.logto.app/oidc/auth?response_type=code
&client_id=s6BhdRkqt3
&state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&resource=https%3A%2F%2Fresource-server.com%2Fapi
&scope=read%20write
Logto 将验证并存储这些资源指示器。一个 authorization_code
将被授予并返回,权限 (Scopes) 将限制在这些指定的资源上。
Logto SDK 的示例配置:
const config: LogtoConfig = {
// ...other configs
resources: ['https://resource-server.com/api'],
scopes: ['read', 'write'],
};
令牌请求 (Token request)
当资源参数与上面授予的 authorization_code
一起出现在 令牌请求 中时,它将指定请求的访问令牌的目标 API 资源受众 (Audience)。
POST https://tenant-id.logto.app/oidc/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb&code=10esc29BWC2qZB0acc9v8zAv9ltc2pko105tQauZ&resource=https%3A%2F%2Fresource-server.com%2Fapi