用于使用Python的SSO的SPNEGO(kerberos令牌生成/验证)
我正在尝试实现一个简单的单点登录场景,其中一些参与的服务器将是windows(IIS)机箱。看来SPNEGO是一条合理的途径 以下是场景:用于使用Python的SSO的SPNEGO(kerberos令牌生成/验证),python,active-directory,single-sign-on,kerberos,spnego,Python,Active Directory,Single Sign On,Kerberos,Spnego,我正在尝试实现一个简单的单点登录场景,其中一些参与的服务器将是windows(IIS)机箱。看来SPNEGO是一条合理的途径 以下是场景: 用户使用其用户名和密码登录到我的SSO服务。我用某种机制验证了他的身份 稍后,用户希望访问应用程序A。 SSO服务会截获用户对应用程序A的请求。SSO服务使用SPNEGO将用户登录到应用程序A: SSO服务点击应用程序A的网页,获得“WWW-Authenticate:Negotiate”响应 SSO服务代表用户生成“授权:协商xxx”响应,响应应用程序
- 用户使用其用户名和密码登录到我的SSO服务。我用某种机制验证了他的身份
- 稍后,用户希望访问应用程序A。
- SSO服务会截获用户对应用程序A的请求。SSO服务使用SPNEGO将用户登录到应用程序A:
- SSO服务点击应用程序A的网页,获得“WWW-Authenticate:Negotiate”响应
- SSO服务代表用户生成“授权:协商xxx”响应,响应应用程序a。用户现在登录到应用程序a
- SSO服务拦截后续用户对应用程序A的请求,在将其传递给应用程序A之前将授权标头插入其中
- SSO服务会截获用户对应用程序A的请求。SSO服务使用SPNEGO将用户登录到应用程序A:
- 代表用户生成“授权:协商xxx”令牌的能力,最好使用Python
- 在Python中验证“Authorization:Negotiate xxx”标题的能力(用于项目的后续部分)
看一下本教程。它似乎在做你想做的事情。我已经搜索了很长一段时间,寻找类似的东西(在Linux上),这让我多次来到这个页面,但没有给出答案。这是我的解决方案,我想到了: web服务器是一个带有mod_auth_kerb的Apache。它已经在Active Directory中运行,单点登录安装已经有一段时间了。 我以前已经能够做到的是:
- 在Linux上使用chromium和单点登录(使用正确的krb5设置,使用kinituser@domain)
- 使用pywin32包中的sspi实现python连接和单点登录,类似于sspi.ClientAuth(“协商”,targetspn=“http/%s”%host)
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)