场景:
Negotiate
标头等)发送正确的响应,并使用kerberos-sspi
包获取访问应用程序的用户的Windows用户名我对Kerberos的经验不多,但对Web应用程序有一些经验。
在我创建的其他使用内置用户数据库的Python Web应用程序中,身份验证流程通常如下:
flask.session
中)/login/
。 POST
到/login/
验证正确的用户名/密码,设置安全cookie并重定向到?next=
查询参数中指定的URL。我的问题是:
/login/
。 /login/
做必要的东西来确定用户是谁(即发送Negotiate
标头,使用kerberos_sspi
查找用户名等),然后设置安全cookie并重定向到?next=
查询参数中指定的URL。是的,您建议的流量似乎可行。
如果Kerberos说是,那么你可以首先登陆/login/
执行Kerberos协商,并将用户重定向回会话。这甚至可以是后台的XMLHttpRequest,如果会话不再有效,则重定向到/login/
。如果在后台检查会话,则cookie的生命周期可能比Kerberos令牌短得多,并且您在任何给定时间都无需担心有效会话。
如果会话不存在,请为该用户提供Kerberos和其他潜在的登录方法。
如果用户通过Kerberos具有有效会话,但没有用户配置文件,请将用户置备到应用程序中。在这里,您可以在现场轮询用户以获取更多信息,根据组和角色进行决策,或者将用户创建为具有一组默认权限,已知缺失值的存根,从而推迟该过程。
这一切都非常笼统。您应该在身份验证,授权和会计中查看您尝试将目标映射到AAA或AAA的内容。很明显,Kerberos正在进行身份验证,剩下的角色需要确定。
关于cookie:将任何身份验证转换为应用程序中的cookie确实很有意义。这样你以后可以在不改变整个应用程序的情况下在侧面添加一些其他SSO方法。