保护你的 API
如果你不需要灵活、细粒度的访问控制策略,你可以直接保护你的 API。我们将通过一个序列图和必要的步骤来指导你如何将访问控制集成到你的应用中。
在本教程中
- Logto 端点:
https://tenant-id.logto.app
- 客户端应用程序:
https://client.example.org
- API 资源服务器:
https://resource-server.com/api
在实现时,你应该用你的实际端点替换这些。
认证请求 (Authentication Request)
在 认证请求 (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
将被授予并返回,权限将限制在这些指定的资源上。
Logto SDK 的示例配置:
const config: LogtoConfig = {
// ...其他配置
resources: ['https://resource-server.com/api'],
scopes: ['read', 'write'],
};
令牌请求 (Token Request)
当资源参数与上面授予的 authorization_code
一起出现在 令牌请求 (Token Request) 中时,它将指定请求的访问令牌的目标 API 资源受众。
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