如何使用新的 Spring Authorization Server 在资源服务器上实现基于角色的授权

Posted

技术标签:

【中文标题】如何使用新的 Spring Authorization Server 在资源服务器上实现基于角色的授权【英文标题】:How to implement role based authorization on resource server with new Spring Authorization Server 【发布时间】:2022-01-15 09:15:56 【问题描述】:

我正在试用新的 Spring Authorization Server,但在我没完没了的谷歌搜索中遇到了死胡同。

如果没有配置 @Secured 和 @EnableGlobalMethodSecurity,它就像一个魅力,但当我尝试使用上述注释保护资源服务器时,我现在收到 403 Forbidden 错误。

授权服务器配置

DefaultSecurityConfig.java

MongoDBUserDetailsS​​ervice.java(用户详细信息服务)

角色的格式为“ADMIN”,没有前缀“ROLE_”,因为它已在运行时添加。

资源服务器配置

ResourceServerConfig.java

ArticlesController.java

【问题讨论】:

不要因为投反对票而气馁。即使有 0 个文档,也有人一直对 Spring 授权服务器相关问题投反对票。示例仅涵盖基本场景,网上资源很少。在花费数周未成功尝试用新的授权服务器替换旧的授权服务器之后。挖掘源代码和测试我可以告诉你我(还)不知道你的问题的答案。我猜投反对票的人希望每个人都能深入了解 IETF 规范,我承认,我没有。 您似乎混淆了角色、权限和范围。请看下面的问题以了解差异。简而言之,在资源服务器中使用角色是没有意义的。 ***.com/questions/68693386/… @EleftheriaStein-Kousathana 我需要同时使用 OAuth 客户端授权范围和用户角色来限制 API。通过使用令牌中的用户名声明检索用户角色并再次将权限设置为令牌,我设法在我的答案中找到了一种方法。 【参考方案1】:

我想出了一个办法,即为我的 jwt 令牌实现一个自定义转换器,然后我可以使用来自令牌的声明从 db 查询用户及其角色,然后将其注入请求过滤器.

CustomJWTAuthenticationConverter ResourceServer SecurityFilterChain

【讨论】:

以上是关于如何使用新的 Spring Authorization Server 在资源服务器上实现基于角色的授权的主要内容,如果未能解决你的问题,请参考以下文章

如何使用新的 Spring Authorization Server 在资源服务器上实现基于角色的授权

如何使用新的spring-boot JAR重新启动容器而没有jar的绝对路径?

Request-Promise:承诺缓存结果

如何在 Spring Boot 应用程序中使用 log4j2 根据大小生成新的日志文件

Spring Boot:过期后如何生成新的访问令牌?

如何在运行时在 spring-SAML 中添加新的 idp 元数据