跳转到主要内容

SATOSA前端基于identity python oidcop

项目描述

SATOSA oidcop前端

CI build License PyPI Downloads Downloads per week Python version Conventional commits

SATOSA前端基于 Identity Python的idpyoidc(之前为 identity python oidcop)。

特性

端点

  • 提供者发现
  • jwks uri
  • 授权
  • 令牌
  • 用户信息
  • 注册
  • 注册读取端点
  • 内省端点
  • 令牌交换

需求

设置

pip install satosa_oidcop

配置

任何人都可以将其oidcop配置迁移到SATOSA,从flask_op或django-oidc-op或任何其他配置,无需任何特别努力。查看 示例配置,我们看到 config.op.server_info 具有标准的SATOSA配置,唯一的添加是以下自定义设置,这些设置在SATOSA中对于互操作性需求是必需的。这些是

  • 身份验证
        authentication:
          user:
            acr: urn:oasis:names:tc:SAML:2.0:ac:classes:InternetProtocolPassword
            class: satosa.frontends.oidcop.user_authn.SatosaAuthnMethod
  • 用户信息
       userinfo:
         class: satosa.frontends.oidcop.user_info.SatosaOidcUserInfo

身份验证 继承自 oidcop.user_authn.user.UserAuthnMethod 并覆盖了两个涉及用户身份验证和验证的方法。这些任务由SATOSA在其身份验证后端处理。

用户信息 继承自 oidcop.user_info.UserInfo 并提出了一种存储来自后端用户声明的方法。声明存储在会话数据库(实际上是mongodb)中,然后在用户信息端点(以及令牌端点,以便在id_token声明中可选地获取它们)中检索。

SSO和cookie

oidcop SSO和cookie尚未实现,因为SATOSA不支持注销,因此它们目前相当无用。

客户端和会话存储

MongoDB是存储,[这里](https://github.com/italia/Satosa-Saml2Spid/tree/oidcop/mongo)有一些关于演示设置的简要描述。SATOSA oidcop存储的接口是satosa.frontends.oidcop.storage.base.SatosaOidcStorage,它有三个方法

  • get_client_by_id(self, client_id:str, expired:bool = True)
  • store_session_to_db(self, session_manager, **kwargs)
  • load_session_from_db(self, req_args, http_headers, session_manager, **kwargs)

satosa.frontends.oidcop.storage.mongo.Mongodb扩展了这些方法以在MongoDB上执行I/O操作。

主题类型

客户端配置还可以包含subject_type键,允许的值有publicpairwise。如果不存在,则默认选择public。这是为了与现有行为保持向后兼容:oidcop (session_manager.create_session)默认为public

为了用户隐私,我们强烈建议对于新的部署选择pairwise,除非绝对需要public(用于连接跨相关但不同的服务中的用户)。

演示

Satosa-Saml2Spid是针对处理许多SAML2和OIDC信赖方以及许多eduGain和SPID身份提供者的自定义Satosa配置。

satosa_oidcop

贡献

请随意提出问题和拉取请求,我们共同建设社区!

开发者注意事项

存储设计

目前存储逻辑基于oidcop会话管理器的加载/导出/刷新方法。每次端点处理请求时,oidcop会话管理器都会从存储中加载定义,只加载与请求严格相关的定义到oidcop的内存存储中。

路线图

  • 单元测试
  • pytest mongo模拟
  • 测试response_type = "code id_token token"([混合流程](https://github.com/IdentityPython/SATOSA/pull/378/commits/a61dc99503bcb9d4982b77a6ddcf0c41b6732915))
  • 使用mongodb索引自动修剪过期会话([自动修剪](https://github.com/IdentityPython/SATOSA/pull/378/commits/137993f77bfb05b44f25ba6df3784e8fb86a31ce),[mongo索引](https://github.com/italia/Satosa-Saml2Spid/tree/oidcop/mongo#create-expired-session-deletion))
  • 令牌刷新
  • DPoP支持

测试

在运行测试之前,请注意您需要启动一个本地mongod实例,例如

sudo docker run \
  --rm \
  -e ALLOW_EMPTY_PASSWORD=yes \
  -e MONGODB_ENABLE_JOURNAL=false \
  -p 27017:27017 \
  --name mongodb \
  bitnami/mongodb:latest

如果您愿意,可以使用mongo-express作为本地mongo实例的管理UI

sudo docker run \
  -e ME_CONFIG_MONGODB_SERVER=$MONGOHOST-OR-DOCKER-BRIDGE-LIKE-172.17.0.1 \
  -p 8081:8081 \
  mongo-express

然后运行测试

pip install pytest pytest-cov
pytest --cov=satosa_oidcop -v --cov-report term --cov-fail-under=95 tests/

作者

  • Giuseppe De Marco @ Università della Calabria

鸣谢

  • Roland Hedberg
  • Andrea Ranaldi @ ISPRA Ambiente
  • Pavel Břoušek @ CESNET
  • Identity Python社区

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

satosa_oidcop-3.0.3.tar.gz (29.2 kB 查看哈希值)

上传时间

构建分发

satosa_oidcop-3.0.3-py3-none-any.whl (29.1 kB 查看哈希值)

上传时间 Python 3

支持