我正计划设置一个将被其他网站访问的网络服务。这个想法是必须保护网络服务,并且每个访问网络服务的站点都将根据其注册域进行身份验证。
- 网站所有者将从我的网络服务的网络前端注册他们的域(如 foo.com)
- 接下来,他们的站点将发出 HTTP 方法(
GET、PUT、POST、DELETE
等),通常是 Javascript HTTP 请求 - 访问网络服务的站点不需要进行身份验证; Web 服务将确定它来自的域是否已预先注册,如果是,我将根据站点的域处理请求。
我现在思考的问题是这种系统是否会“扩展”并“工作”
我用过 Apache Shiro 和 Spring Security,但我从未遇到过这种需求。
最佳答案
请注意,根据设计,您的系统将在没有密码的情况下验证用户。
这意味着,如果用户从 http://foo.com 访问,则使用访问权限无需提供密码即可通过身份验证后获得foo.com
用户权限。
我想建议用您自己的 PreAuthenticatedProcessingFilter
解决您的问题:
http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#d0e6167
在您实现 getPreAuthenticatedPrincipal
时,只需获取请求 URL,从请求 URL 中提取域(无子域)信息并使用 PreAuthenticatedAuthenticationProvider
进行身份验证。
PreAuthenticatedAuthenticationProvider
的 AuthenticationUserDetailsService
应该从数据库加载注册域。
关于java - 跨域认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106431/