我有一个网站,其中包含AngularJS中的前端和Python中的后端。
目前,我们正在为用户提供一个简单的网络表单来获取凭据。
表单中的凭据将发送到Python后端(flask
webservice)(这是一种基本的身份验证机制)。
现在,我们要在网站上启用单点登录(SSO
)。我们的身份提供商是Pingone
或Ping Federate
。
我从头开始......没有事先了解SAML
或SSO
。
我想知道要走哪条路?
使用哪些库,更重要的是,如何使用它们?
在这个时间点,我不确定SAML
如何识别用户,然后对他/她进行身份验证。
答案 0 :(得分:3)
SAML的基本交换始于用户在Python服务器上请求资源(页面,SPA应用程序)。服务器确定用户是否已经过身份验证(具有会话,JWT令牌等),如果没有,则创建SAML请求令牌以通过重定向发送到身份提供者(为此使用库)。
身份提供商通过数字签名验证SAML请求令牌。验证令牌后,系统会要求用户登录(如果尚未对其进行身份验证)。用户通过身份验证后,身份提供商会创建一个SAML请求令牌,该令牌通过重定向显示在您的服务器上。
收到SAML请求令牌后,您的服务器会通过数字签名验证令牌,并将用户视为已登录(再次使用此部件的库)。令牌将最低限度地识别用户,但可以包含授权和其他信息。此时,您的用户已经过身份验证,您可以在服务器上创建会话,或者创建一个JWT令牌,以便在角度应用程序中向Python后端标识您的用户。
创建SAML请求令牌并在生成的SAML响应令牌中进行处理并非易事。如上所述,使用库,最好是经过时间测试的库。我不是Python开发人员,但我发现了一些谷歌搜索:onelogin/python-saml。
Wikipedia有一个很好的序列图来证明这一点,当然你可以仔细阅读Oasis SAML docs website上的许多文档。
祝好运实施。我在Java中已经完成了几次。