未知
seamless的Python项目详细描述
无缝提供了一种通过ssh获取https会话令牌的简单方法。 它自动创建用户帐户,并通过强制ssh命令管理其授权密钥以及会话令牌创建。 认证流程如下:
客户端通过ssh连接到无缝领域@seamless host并使用公钥进行身份验证。 密钥被限制为只执行无缝二进制文件的令牌创建命令。 无缝命令返回会话令牌,该令牌使用特定于无缝领域的机密进行签名。
$ ssh -T seamless-realm@seamless-host username.VgfAwA.v-xKIZh3qYawqcm2RRh4q-LPfVE
客户端将其请求的httpauthorization头中获得的令牌发送到受保护的应用程序。 应用程序使用共享密钥验证令牌。
GET/HTTP/1.1Host:protected-appAuthorization:seamless username.VgfAwA.v-xKIZh3qYawqcm2RRh4q-LPfVE
安装
从DEB包:
$ wget https://github.com/emulbreh/seamless/releases/download/v0.1.0/seamless_0.1.0_amd64.deb $ sudo dpkg -i seamless_0.1.0_amd64.deb
作为python包:
$ pip install seamless
设置无缝领域
无缝领域是无缝主机上的用户帐户。这些帐户的授权密钥的创建和管理由无缝处理。
$ sudo seamless init seamless-realm $ sudo seamless add seamless-realm /path/to/public/key --user username
具有此公钥的用户现在可以通过ssh获取令牌:
$ ssh -T seamless-realm@seamless-host username.VgfOLQ.EB6NTfXiyv7dWSKUMQJ38JXa5aw
或者来自python
>>>importseamless>>>seamless.get_token('seamless-realm@seamless-host')'username.VgfOBA.dRBDY5EUmQvhB8OnqPDWlC1tml4'
使用wsgi中间件保护web服务
无缝与wsgi中间件一起提供,该中间件验证是否通过授权头传递了有效的无缝令牌。
fromseamless.wsgiimportSeamlessMiddlewareapp=...app=SeamlessMiddleware(app,max_age=60,secret='...')
没有有效的authorization头的请求将被401响应拒绝。
使用requests:
的身份验证插件可以轻松地向这样一个受保护的应用程序发出请求importrequestsfromseamless.requestsimportSeamlessAuthsession=requests.Session()session.auth=SeamlessAuth('name@seamless-host')session.get('http://protected-app/')
从无缝主机获取的令牌被缓存。 它将在过期时自动刷新,并重试失败的请求。
注意事项
- 如果在不同于令牌创建的主机上执行令牌验证,则时钟偏移可能会导致令牌过早或太晚过期。