我正在尝试实现一个简单的单点登录方案,其中一些参与的服务器将是Windows(IIS)框。看起来SPNEGO是一条合理的道路。
以下是该方案:
这听起来不错吗?
我需要两件事(至少我现在能想到的):
答案 0 :(得分:8)
这正是Apple对其Calendar Server所做的事情。他们有一个python gssapi库用于该过程的kerberos部分,以实现SPNEGO。
在CalendarServer / twistedcaldav / authkerb.py中查找服务器身份验证部分。 kerberos模块(它是一个c模块)没有任何有用的文档字符串,但PyKerberos / pysrc / kerberos.py具有所有函数定义。
这是svn中继的网址:
http://svn.calendarserver.org/repository/calendarserver/CalendarServer/trunk
http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk
答案 1 :(得分:0)
查看http://spnego.sourceforge.net/credential_delegation.html教程。它似乎正在做你想要做的事情。
答案 2 :(得分:-1)
我已经花了很长时间搜索类似的东西(在Linux上),这导致我多次访问此页面但却没有回答。所以这是我的解决方案,我想出了:
Web服务器是带有mod_auth_kerb的Apache。它已经在Active Directory中运行,单点登录设置已经有一段时间了。 我以前能够做的事情:
sspi.ClientAuth("Negotiate", targetspn="http/%s" % host)
以下代码片段完成了这个难题(以及我的需求),在Linux上使用Kerberos进行Python单点登录(使用python-gssapi):
in_token=base64.b64decode(neg_value)
service_name = gssapi.Name("HTTP@%s" % host, gssapi.C_NT_HOSTBASED_SERVICE)
spnegoMechOid = gssapi.oids.OID.mech_from_string("1.3.6.1.5.5.2")
ctx = gssapi.InitContext(service_name,mech_type=spnegoMechOid)
out_token = ctx.step(in_token)
buffer = sspi.AuthenticationBuffer()
outStr = base64.b64encode(out_token)