Java 需要帮助配置ApacheShiro以实现身份验证分离(多个RESTAPI)
我正在使用AngularJS前端和Spring Boot REST后端构建一个web应用程序(它们在单独的服务器上运行,即端口3000和端口8443)。后端应该连接到多个外部服务(使用单独的身份验证),并提供供前端使用的端点 为了安全起见,我决定使用ApacheShiro。为了简单起见,我将假设只有两个外部服务(ES1和ES2) 我已经创建了两个xJava 需要帮助配置ApacheShiro以实现身份验证分离(多个RESTAPI),java,spring,rest,authentication,shiro,Java,Spring,Rest,Authentication,Shiro,我正在使用AngularJS前端和Spring Boot REST后端构建一个web应用程序(它们在单独的服务器上运行,即端口3000和端口8443)。后端应该连接到多个外部服务(使用单独的身份验证),并提供供前端使用的端点 为了安全起见,我决定使用ApacheShiro。为了简单起见,我将假设只有两个外部服务(ES1和ES2) 我已经创建了两个xauthorizationrealm,它们连接到各自的外部服务,并尝试使用提供的令牌进行身份验证 在doGetAuthenticationInfo方法
authorizationrealm
,它们连接到各自的外部服务,并尝试使用提供的令牌进行身份验证
在doGetAuthenticationInfo
方法中,如果登录成功,我将返回一个SimpleAuthenticationInfo
,其中包含主体、凭据和领域名称
在doGetAuthorizationInfo
方法中,我检查主体的域名,如果它签出,我将返回一个SimpleAuthorizationInfo
,其中包含角色“USER”和权限(例如允许ES1)
我还为每个领域扩展了UsernamePasswordToken
类,以进一步分离使用(通过支持
方法)
在一个配置类中,我为DefaultWebSecurityManager
创建了一个bean,该bean使用我的两个领域,并为Shiro过滤器创建了一个bean。
我添加了4个过滤器:
- anon
AnonymousFilter
- perm
PermissionsAuthorizationFilter
- es1
es1过滤器
- es2
es2过滤器
/api/es1/login -> anon
/api/es1/** -> es1, perms[ES1_permitted]
/api/es2/login -> anon
/api/es2/** -> es2, perms[ES2_permitted]
/** -> anon
不知何故,当我从同一台服务器(没有CORS)提供前端和后端服务时,它似乎起了作用。然而,现在CORS是一个问题,我似乎不能让它像预期的那样工作
有没有更简单的方法来实现身份验证/授权的完全分离?如果可以的话,我愿意转用SpringSecurity
PS:我使用的是JavaAPI,而不是配置文件(SpringXML或shiro.ini)