基于Pyramid的oAuth服务器
项目描述
简介
奥西里斯(/oʊˈsaɪərɨs/)是古埃及的一位神,通常被认定为死后世界、阴间和死者的神。他通常被描绘为一个绿色皮肤的人,留着法老的胡须,腿部部分裹着绷带,戴着带有两侧大鸵鸟羽毛的独特王冠,手持象征性的权杖和鞭子。奥西里斯是死后世界的审判者,他称量死者的灵魂并与真理之羽进行比较。称量最重者被送往阿慕特(灵魂吞噬者),不够重者则进入阿鲁(埃及的乐园)。
奥西里斯是基于Pyramid的符合OAuth 2.0标准的服务器。当前版本(1.0)支持资源所有者密码凭证认证流程。您可以使用您首选的认证后端(LDAP、SQL等)来通过奥西里斯启用OAuth。您还可以使用您首选的后端存储作为奥西里斯使用可插拔存储工厂来存储签发的令牌信息。当前版本包括MongoDB存储。
资源所有者密码凭证流程
此流程不是最受欢迎的OAuth流程,但在我们想在一个已存在的用户后端场景中为应用程序或应用程序集启用OAuth时非常有用。使用此流程,您可以将奥西里斯用作现有用户存储和OAuth之间的网关。奥西里斯将对您的用户存储进行用户凭证认证,如果成功,它将签发OAuth令牌。然后,应用程序可以使用它来代表用户的令牌访问OAuth启用的REST API,例如。
因此,根据OAuth规范,Osiris提供了一个额外的端点,以允许远程应用程序和资源服务器检查先前颁发的令牌和用户,并进行验证。如果令牌对指定的用户有效,并且令牌未过期或被撤销,该端点将做出响应。
您可以将Osiris作为一个独立的应用程序使用,或者将其作为Pyramid插件使用,使您的应用程序具有Osiris功能。
设置
这是将其用作独立Pyramid应用程序的配置,以及您自己的应用程序,在您的app.ini中使用Paste urlmap。
[server:main] use = egg:Paste#http host = 0.0.0.0 port = 80 [composite:main] use = egg:Paste#urlmap / = YOURAPP /oauth2 = osiris [app:osiris] use = egg:osiris osiris.store = osiris.store.mongodb_store osiris.store.host = localhost osiris.store.port = 27017 osiris.store.db = osiris osiris.store.collection = tokens osiris.tokenexpiry = 0 osiris.whoconfig = %(here)s/who.ini osiris.ldap_enabled = false [app:YOURAPP] use = egg:YOURAPP full_stack = true static_files = true
您也可以在您的__init__.py中启用Osiris功能
config.include(osiris)
并在.ini中
osiris.store = osiris.store.mongodb_store osiris.store.host = localhost osiris.store.port = 27017 osiris.store.db = osiris osiris.store.collection = tokens osiris.tokenexpiry = 0 osiris.whoconfig = %(here)s/who.ini osiris.ldap_enabled = false
或者作为独立使用(见production.ini)。
选项
以下是Osiris可用的.ini选项
- osiris.store
目前仅提供osiris.store.mongodb_store。必需。
- osiris.store.host
默认为‘localhost’。可选。
- osiris.store.port
默认为‘27017’。可选。
- osiris.store.db
数据库名称。默认为‘osiris’。可选。
- osiris.store.collection
存储令牌的集合。默认为‘tokens’。可选。
- osiris.tokenexpiry
令牌有效的秒数。默认为0(无限期)。可选。
- osiris.whoconfig
包含身份验证后端配置的pyramid_who (repoze.who) .ini文件。必需。
针对资源所有者密码凭据流的REST API
遵循OAuth 2.0身份验证标准(草案22),必须实现此Web服务并使用这些参数
- /token
- 方法
POST
- 参数
- grant_type
必需。值必须设置为password
- username
必需。资源所有者用户名,编码为UTF-8。
- password
必需。资源所有者密码,编码为UTF-8。
- scope
可选。访问请求的范围。
- Content-Type
application/x-www-form-urlencoded
- 响应
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache
{ “access_token”:”Qwe1235rwersdgasdfghjkyuiyuihfgh”, “token_type”:”bearer”, “expires_in”:3600, “scope”: “exampleScope” }
- /checktoken
- 方法
POST
- 参数
- access_token
必需。要检查的令牌值
- username
必需。资源所有者用户名,编码为UTF-8。
- scope
可选。访问请求的范围。
- Content-Type
application/x-www-form-urlencoded
- 响应
如果成功:HTTP/1.1 200 OK 如果不成功:HTTP/1.1 401 未授权
身份验证后端
您可以在两个身份验证后端插件之间进行选择:pyramid_ldap和pyramid_who。
pyramid_ldap(用于LDAP身份验证后端)
pyramid_ldap是处理Pyramid中LDAP的默认标准插件。
这是启用LDAP所需的.ini配置
osiris.ldap_enabled = true osiris.ldap.server = ldaps://your.ldap.uri osiris.ldap.userbind = cn=user.to.bind,ou=users,dc=my,dc=domain osiris.ldap.password = secret osiris.ldap.userbasedn = ou=users,dc=my,dc=domain osiris.ldap.userfilter = (cn=%+(login)s) osiris.ldap.userscope = SCOPE_ONELEVEL osiris.ldap.groupbasedn = ou=groups,dc=my,dc=domain osiris.ldap.groupfilter = (&(objectClass=groupOfNames)(member=%+(userdn)s)) osiris.ldap.groupscope = SCOPE_SUBTREE osiris.ldap.groupcache = 600
根据您的LDAP配置进行调整。有关更多信息,请参阅:http://docs.pylonsproject.org/projects/pyramid_ldap/en/latest/
pyramid_who
pyramid_who是插件,它提供了一种可插拔的设施,用于通过repoze.who插件连接到多个用户后端(htpass、SQL等)。
为了使用它,您不应该启用ldap
osiris.ldap_enabled = false
并提供您的who.ini路径
osiris.whoconfig = %(here)s/who.ini
有关更多信息,请参阅:http://docs.repoze.org/who/2.0/
待办事项
Osiris仅具有一个OAuth 2.0身份验证流程:资源所有者密码凭据(http://tools.ietf.org/html/rfc6749#section-4.3)。它已准备好适应OAuth 2.0定义的其余流程。类似的情况也发生在可用的存储后端。当前版本仅提供MongoDB存储,但Osiris支持使用插件存储模型,并可适应更多存储类型。
当然,任何贡献都是受欢迎的。请随时贡献您自己的存储插件,并帮助实现剩余的OAuth流程。
致谢
受Ben Bangert的Velruse(https://github.com/bbangert/velruse)的启发,实现可插拔存储工厂。从pyramid-oauth2(http://code.google.com/p/pyramid-oauth2/)借用错误处理,作者Kevin Van Wilder等。
变更日志
1.4 (2014-05-26)
使 Osiris 支持双因素认证(基于 LDAP 和 WHO)并优先考虑基于 LDAP 的用户库。[Victor Fernandez de Alba]
添加许可证 [Victor Fernandez de Alba]
合并 github.com:sneridagh/osiris 的 'master' 分支 [Victor Fernandez de Alba]
更多测试,统一 .ini 文件中的 ldap 配置 [Victor Fernandez de Alba]
统一 README 和 CHANGES 中的扩展。更新 MANIFEST.in [Victor Fernandez de Alba]
1.3 (2013-08-02)
添加了 greenlets 的使用和集群启用时的重新连接处理 [Victor Fernandez de Alba]
支持 mongoDB 集群 [Victor Fernandez de Alba]
1.2 (2013-06-13)
更新连接到 MongoDB 数据库的已弃用方法。
添加了连接到 MongoDB 副本集的能力。
1.1 (2013-06-04)
添加了一种新的解析 LDAP 设置的方法,用于通过 ldap.ini 配置文件与 pyramid_ldap 一起使用
1.0.1 (2013-06-04)
修复了启用 LDAP 插件时的 UnboundLocalError [Victor Fernandez de Alba]
1.0 (2013-05-19)
提高了测试覆盖率(总体 91%,实现部分 100%) [Victor Fernandez de Alba]
更新实现以符合最终的 OAuth 2.0 规范 [Victor Fernandez de Alba]
完善了作用域、错误处理、返回代码和错误信息 [Victor Fernandez de Alba]
包括 pyramid_ldap 插件的支持,因为它的实现比 repoze.who 更好 [Victor Fernandez de Alba]
在 mongodb_store 上弃用 capped 集合 [Victor Fernandez de Alba]
1.0 beta1(2012-02-22)
初始版本
项目详情
osiris-1.4.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 502250d283b8ea1590167fbc13b0d858afdcf14b65a37c24e63520bfe734ed6b |
|
MD5 | 3529c8232a64d79c2cbcbd95e2b88baf |
|
BLAKE2b-256 | a6313336d8bbcc7070d83c67aa31a971d6b8f264eaecfe658abcabdec2ae3ce0 |