未知

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/')

从无缝主机获取的令牌被缓存。 它将在过期时自动刷新,并重试失败的请求。

注意事项

  • 如果在不同于令牌创建的主机上执行令牌验证,则时钟偏移可能会导致令牌过早或太晚过期。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
写入远程文件java   在java中尝试播放音频时出现音频流错误。wav文件   用户界面如何在Java中禁用GUI按钮   在java中如何使用条件拆分字符串   java从一个方法在数组中设置,从另一个方法获取   java如何忽略“”而不是“”   java证书。木卫一。IOException:密钥库被篡改,或密码不正确   java Android onCreate不调用   在play framework(i18n)中未正确显示德语Umlautes的java显示   使用java从eclipse运行MacOSX命令的macos   java是检查数组中备用项的最有效方法   如何使用java流编写包含循环、if/else和返回语句的代码   为什么在Java中,循环内的声明似乎比循环外的声明更快?   java软件包不存在mvn clean install