spring security + Oauth2 内部2个子系统认证用户和管理员权限分离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring security + Oauth2 内部2个子系统认证用户和管理员权限分离相关的知识,希望对你有一定的参考价值。

参考技术A spring cloud分布式微服务,尽量解耦所有业务,以方便拆分扩展,分布式。
在我们的业务系统中碰到一种场景,内部子服务中,有2个子系统分别是不同的用户登录,注册用户和管理员访问的是不同的子系统,用户和管理员现在用的是一张表,但是又只需要用一个登录服务,不同子系统又拥有独立的权限。
在网上没有找到解决方案,但是提供了一个思路,在网上找到了这样一篇文章 使用oauth2时,用户和管理员是分开存的,不同的表,oauth2怎么配置 ,看评论提到用scope来做,于是改写我们的UserDetailsServiceImpl,当然spring security + Oauth2的案例网上很多这里,就不详述了。
通过改写UserDetailsServiceImpl来实现不同的系统登录进来的用户,访问不同的库,得到不同的用户权限。

主要思路就是,子系统分别定义不同的scope,在loadUserByUsername的时候拿到ClientDetails,这样从不同子系统过来的请求,查询不同的用户权限。这样就可以达到不同用户,不同系统的不同权限的分离。

当然这是其中一种解决方案,如果有更好的方案欢迎分享。

Spring 中的 spring-security-oauth2 与 spring-security-oauth2-core

【中文标题】Spring 中的 spring-security-oauth2 与 spring-security-oauth2-core【英文标题】:spring-security-oauth2 vs spring-security-oauth2-core in Spring 【发布时间】:2019-09-25 05:04:18 【问题描述】:

spring-security-oauth2和spring-security-oauth2-core有什么区别? spring-security-oauth2 被 spring-security-oauth2-core 替代了吗?

spring-security-oauth2 发布链接: http://repo.spring.io/release/org/springframework/security/oauth/spring-security-oauth2/

spring-security-oauth2-core 发布链接 http://repo.spring.io/release/org/springframework/security/spring-security-oauth2-core/

【问题讨论】:

【参考方案1】:

是的,有很大的不同。 spring-security-oauth2(Spring Security OAuth 项目)是no longer being actively developed。

展望未来,它将在 Spring Security 5 中实现(在 spring-security-oauth2-core 中)。这很令人困惑,因为许多教程使用以前的 Spring Security OAuth(@EnableResourceServer@EnableAuthorizationServer@EnableOAuth2Sso 注释通常会放弃它)。

【讨论】:

【参考方案2】:

第一个链接与 Spring 4 相关,它与 Spring Security 版本相匹配。您可以在 pom.xml 文件中验证这一点。

第二个链接与 Spring 5 和 Spring Security 5 相关。这不仅可以从您在该链接中看到的版本中直接看出,而且您可以在 Spring Security 5 documentation 中找到直接命名的依赖项。

【讨论】:

【参考方案3】:

区别在spring git仓库中有描述

https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide

它是旧库:security/oauth/spring-security-oauth2/ 如您所见,该库位于 spring-security 的“oauth”组中。

我不建议将旧库用作客户端,因为存在许多未解决的问题,包括有关存储 clientContext 的问题(库使用代理而不是普通实体,因此您在使用 MA 时会遇到问题带分布式缓存)。此外,它不允许同时使用多个 OAuth2.0 提供程序(只有一个)。

同时,该库提供了一个显着优势,即使用未在新库中实现的授权服务器。

【讨论】:

以上是关于spring security + Oauth2 内部2个子系统认证用户和管理员权限分离的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

Spring Security---Oauth2详解

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