我正在尝试实现一个简单的单点登录方案,其中一些参与的服务器将是 Windows (IIS) 框。看起来 SPNEGO 是一个合理的路径。
这是场景:
- 用户使用他的用户名和密码登录到我的 SSO 服务。我使用某种机制对他进行身份验证。
- 稍后,用户想要访问 App A。
- 用户对 App A 的请求被 SSO 服务拦截。SSO 服务使用 SPNEGO 将用户登录到 App A:
- SSO 服务点击 App A 网页,获得“WWW-Authenticate: Negotiate”响应
- SSO 服务代表用户生成“Authorization: Negotiate xxx”响应,响应 App A。用户现在登录到 App A。
- SSO 服务拦截用户对 App A 的后续请求,将 Authorization 标头插入其中,然后再将其传递给 App A。
- 用户对 App A 的请求被 SSO 服务拦截。SSO 服务使用 SPNEGO 将用户登录到 App A:
听起来对吗?
我需要两件事(至少我现在能想到的):
- 代表用户生成“授权:协商 xxx”令牌的能力,最好使用 Python
- 在 Python 中验证“授权:协商 xxx”标头的能力(用于项目的后面部分)