Spring Security OAUTH2 - 如何根据客户端 ID 限制对 API 的访问?

Posted

技术标签:

【中文标题】Spring Security OAUTH2 - 如何根据客户端 ID 限制对 API 的访问?【英文标题】:Spring Security OAUTH2 - How to restrict access to APIs based on client ID? 【发布时间】:2021-05-18 08:38:45 【问题描述】:

您好,我是 Spring Security 的新手。 我有一个带有几个端点的控制器。这些端点来自资源服务器。

POST /secured/user/create
POST /secured/user/update
GET /secured/user/id

在访问这些 API 之前,客户端必须从我的授权服务器获取一个令牌,然后在调用上述 API 时使用它。但是,我想限制用户仅根据他的客户端 ID 访问 GET api。客户端应该无法调用创建或更新 API。

有没有办法做到这一点?以及如何在代码中做到这一点?我假设以下

    必须在授权服务器的 JWT 令牌中添加一些内容。我猜范围? 当资源服务器的 API 被命中时,它将验证令牌。如果范围不允许 API,则服务器将返回 HTTP 401 Unauthorized

任何资源或链接将不胜感激!

【问题讨论】:

【参考方案1】:
    您可以配置授权服务器以将任何声明添加到令牌,您最终将需要正确授权请求。这可以是范围声明、client_id 声明或更细粒度的声明,例如 can_read_user_data: true

您可以在此处找到的文章中阅读很多关于声明、范围、它们之间的关系以及围绕范围和声明的最佳实践:https://curity.io/resources/claims/

    你可以看看这篇文章,了解如何在 Spring 中实现 JWT 声明的验证:https://curity.io/resources/tutorials/howtos/writing-apis/spring-boot-api/

【讨论】:

感谢您的链接。看起来很有用

以上是关于Spring Security OAUTH2 - 如何根据客户端 ID 限制对 API 的访问?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序

Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt

针对授权标头的Spring Security OAuth2 CORS问题

OAuth2.0学习(4-1)Spring Security OAuth2.0 - 代码分析

Spring Security---Oauth2详解

如何使用spring-security,oauth2调整实体的正确登录?