在工作中,我们开发的多个系统是高度模块化的,不应该彼此有硬依赖性。现在,我们需要这些系统共享一种用于身份验证和安全性的通用机制,换句话说,就是sso(单点登录)。很明显,我们将不得不制作另一个处理管理授权、身份验证和安全性的模块——SSO模块。关键是要让它与我们的其他系统适当地集成。
我能想到的两种方法是:
1)公开来自sso的restful服务,该服务允许其他两个系统执行身份验证和授权操作。
2)公开一个用于身份验证和授权的通用API,它将包装我们的SSO功能,并让两个系统引用该API并直接使用它。
目前,我们不考虑在这个领域使用任何第三方解决方案,并且我们已经在SSO模块上做了一些工作,所以我们倾向于坚持一个简单的解决方案,它将最好地利用现有的努力。
我们应该选择哪种方法?为什么?彼此相比有什么显著的好处?有更好的选择吗?
最佳答案
“我应该将它公开给rest还是用api包装?”
两全其美。
将authentication&authorization模块公开为restful服务,以允许最大程度的互操作性,而不考虑为每个模块选择的语言、框架或平台。任何可以通过http进行通信的都可以使用它。
然后用您选择的语言开发一个与restful服务通信的库;这将使多个模块更容易使用集中的auth机制。因此,您将拥有用ruby、java等语言编写的小客户机,这取决于您用于模块的语言。
这种代码重用是面向服务体系结构的关键租户之一,在我看来,这是一条路。我和一些同事根据我们在brighttag和其他公司的经验,在arecent presentation中更深入地描述了这一点。
许多“企业”sso系统,如CAS使用非常类似的方法(尽管cas协议不是restful)。如果您想要更高级的功能,我一定会给cas一个外观。
关于java - 有关创建自己的SSO的建议-我应该将其公开给REST还是将其包装在API中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12250043/