通过实施身份验证和授权(a&a)机制为所有用户数据设计集中式服务。 我将分享我的经验并最终确定解决方案的结论。
该设计包括客户端(Web应用程序)和服务器(A&A中心)。
术语:
1.验证:
认证是系统可以安全地标识其用户的机制。 回答问题“谁是用户?” 身份验证还包括SSO(单点登录)。 一种机制,使用户能够一次登录并获得所有参与资源的“免费通行证”,而无需附加标志。
2.授权:
授权是验证用户是否具有访问某些资源或部分的角色/权限的过程。
回答问题:用户X是否有权访问资源/操作Y?
3.受保护的客户:
通常,a&a机制与受保护的客户端框架配合使用:Spring安全性,Apache Shiro,Wicket身份验证等。 我将在稍后的文章中进行评论。
要考虑的主要主题:
- 认证服务器
- 安全的Web客户端框架
- 授权职责
完整的解决方案提供商:
在我的研究中,我遇到了完整的解决方案提供商:
- Open AM(称为OpenSSO)–他们声称是一个开源项目。 但是过了一会儿,您发现它确实是一个开放源代码,但并非用于商业用途。 您需要为他们的a&a配套支付大量的钱。
- 人群– Atlassian。 似乎是一种快速,良好且非常便宜的解决方案。 但是,我们仍在走向完全商业化的开源解决方案。 这个也不符合我们的需求。
受保护的客户:
- Spring安全性:非常流行并且广泛使用。 当您想要拥有除基本设置以外的更多功能时,Spring Security需要大量的xml配置。
此外,如果您需要支持权限(而不仅是角色),Spring安全性不提供现成的支持。
- Apache Shiro:–很棒的产品。 开箱即用的配置和权限支持非常简单。
问题在于Shiro的社区仍然很小,而且该项目还很新。
解:
- 认证服务器:
我遇到了CAS(中央身份验证服务)–伟大且完全开源的项目。 CAS提供SSO解决方案并支持流行的协议,例如SAML,OPENID,Auth。
因此,如果我们将CAS与LDAP服务器集成在一起(以保存用户的信息),我们就可以实现身份验证模型(并且开箱即用地拥有SSO)。
CAS基于Spring,非常容易扩展,以防我们要进行自定义更改。 您可以轻松下载源代码,并根据需要对其进行自定义。
CAS配置非常容易并且有据可查。
- 受保护的客户端框架:
我选择了Spring Security。 三个原因:
- 该Web应用程序是基于Spring的。
- 受欢迎和背后的社区绰绰有余。
- 与CAS完美集成。
*我提到Spring安全缺乏权限。 但是有一种解决方法。 可以在此处找到简短的示例: http : //en.tekstenuitleg.net/blog/spring-security-with-roles-and-rights
到目前为止,我们有Spring Security,Cas和LDAP(OpenLdap)服务器。
- 授权职责:
可能有些棘手取决于您的项目要求。 您可以通过两种方式配置授权流:
- 集中授权:
CAS支持属性。 这意味着您可以向返回的响应中添加其他属性(角色/权限)(通过SAML,这非常简单)。
您实际上可以选择并配置从哪个源中提取其他属性(数据库,Ldap,Active Directory等)。
这是一个非常简洁而优雅的解决方案–一个中心,可以按要求提供每个用户的身份验证和授权角色/权限。
- 分散授权:
您可以通过扩展UserDetails接口来配置Spring Security。 然后,让每个应用程序在成功通过身份验证后控制授权逻辑。
*是否存在每个Web客户端应用程序应对其授权逻辑负责还是对其进行集中管理的公开辩论(正如我在第一点所述)。
- 集中授权:
我建议根据您的项目需求用例来确定正确的态度。
最后,我们有了一个完全用于商业用途的a&a开源解决方案。
翻译自: https://www.javacodegeeks.com/2013/11/authentication-and-authorization-as-an-open-source-solution-service.html