我试图实现一个简单的单点登录场景,其中一些参与服务器将是windows(IIS)框。看起来SPNEGO是一条合理的途径。
下面是场景:
- 用户使用他的用户名和密码登录到我的SSO服务。我用某种机制验证他。
- 稍后用户希望访问应用程序A。
- SSO服务拦截用户对应用程序A的请求。SSO服务使用SPNEGO将用户登录到应用程序A:
- SSO服务点击应用程序的网页,得到“WWW Authenticate:Negotiate”响应
- SSO服务代表用户生成“Authorization:Negotiate xxx”响应,响应应用程序a。用户现在登录到应用程序a
- SSO服务截获随后用户对应用程序A的请求,在将其传递给应用程序A之前将授权头插入其中
听起来对吗?
我需要两件事(至少我现在能想到):
- 能够代表用户生成“Authorization:Negotiate xxx”令牌,最好使用Python
- 在Python中验证“Authorization:Negotiate xxx”头的能力(用于项目的稍后部分)
Tags:
我花了很长时间寻找类似的东西(在Linux上),这让我多次来到这个页面,但没有给出答案。所以这是我的解决方案,我想:
web服务器是一个带有mod_auth_kerb的Apache。它已经在一个活动目录中运行了一段时间,单点登录安装程序。 我以前已经能做的:
sspi.ClientAuth("Negotiate", targetspn="http/%s" % host)
下面的代码片段完成了这一难题(以及我的需要),其中使用了Python single sign on with Kerberos on Linux(使用Python gssapi):
看看http://spnego.sourceforge.net/credential_delegation.html教程。它似乎在做你想做的事。
这正是苹果对其Calendar Server所做的。它们有一个用于进程kerberos部分的python gssapi库,以便实现SPNEGO。
在CalendarServer/twistedcaldav/authkerb.py中查找服务器验证部分。 kerberos模块(它是一个c模块)没有任何有用的docstring,但是PyKerberos/pysrc/kerberos.py有所有的函数定义。
以下是svn中继的URL:
http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk
http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk
相关问题 更多 >
编程相关推荐