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问题