跳转到主要内容

可以从命令行运行的SAML2 SPID/CIE服务提供商验证工具

项目描述

spid-sp-test

CI build pypi License Python version Downloads Downloads

spid-sp-test是一个可以从命令行执行的SAML2 SPID/CIE服务提供商验证工具。这个工具是通过从spid-saml-check中分离测试库而产生的。

摘要

特性

spid-sp-test可以

  • 测试SAML2 SPID/CIE元数据文件或http url
  • 测试SAML2 SPID/CIE AuthnRequest文件或http url
  • 测试SAML2 eIDAS FICEP SP元数据文件或http url
  • 测试多种类型的SPID SP,请参阅配置文件
  • 测试ACS行为,即SP如何回应SAML2响应
  • 转储发送到ACS的响应和SP响应的HTML
  • 处理要发送到响应中的属性或通过json配置文件测试响应的配置
  • 使用Jinja2配置响应模板
  • 通过多个json文件获取新的测试套件
  • 完全集成到CI中
  • 以json格式、在stdout或文件中导出详细报告

通常它

  • 在执行时间上比spid-saml-check快得多
  • 非常容易设置

检查元数据

Command line with metadata checking

身份验证请求,JSON输出

Command line with more flag demoed

包含元数据、身份验证请求和响应的完整测试集

Command line with test responses

配置文件

每个配置文件加载一组测试。使用以下其中一个配置文件名称的--profile $profile-name

  • saml2-sp:纯SAML2 SP,具有一些最佳实践
  • spid-sp-public:公共Spid SP
  • spid-sp-private:私人Spid SP
  • spid-sp-ag-public-full:公共Spid SP Aggregatore Full
  • spid-sp-ag-public-lite: 公共 Spid SP Aggregatore Lite
  • spid-sp-ag-private-full: 私有 Spid SP Aggregatore Full
  • spid-sp-ag-private-lite: 私有 Spid SP Aggregatore Lite
  • spid-sp-op-public-full: 公共 Spid SP Gestore Full
  • spid-sp-op-public-lite: 公共 Spid SP Gestore Lite
  • cie-sp-public: 公共 CIE SP
  • cie-sp-private: 私有 CIE SP
  • ficep-eidas-sp: eIDAS FICEP SP

警告:Aggregatore 和 Gestore 的支持不涵盖 x.509 证书。Spid-sp-test 使用 spid-compliant-certificates-python 进行证书的验证。

设置

先决条件

  • LibXML2
  • xmlsec with openssl engine support
  • python3
  • pip 用于通过 Python 包管理器自动安装

在 Debian 类的发行版中设置虚拟环境

# install prerequisite
apt install libxml2-dev libxmlsec1-dev libxmlsec1-openssl xmlsec1 python3-pip python3-virtualenv
# initialize virtual env
virtualenv -p python3 env
source env/bin/activate

# install spid-sp-test 
pip install spid-sp-test --upgrade --no-cache

概述

spid-sp-test 可以测试 SP 元数据文件,您只需提供元数据 URL,如果是 http/http 或文件,例如:file://path/to/metadata.xml。同样,它可以测试身份验证请求。

spid-sp-test 以不同的方式可以发送大量虚假 SAML 响应,对于每一个,它都需要对目标 SP 触发真实的身份验证请求。

如果您想测试响应,您必须将 spid-sp-test 的虚假 IDP 元数据 XML 文件提供给目标 SP。获取虚假 IDP 元数据(--idp-metadata)并将其复制到您的 SP 元数据存储文件夹。

spid_sp_test --idp-metadata > /path/to/spid-django/example/spid_config/metadata/spid-sp-test.xml

要在 CI 中获取 spid-sp-test,您必须

  • 在您的应用程序中配置一个示例项目
  • 在您的 SP 中注册 spid-sp-test 虚假 IDP 元数据并执行示例项目,其开发服务器在后台运行
  • 启动 spid-sp-test 命令

CI 的一个示例 在这里

示例

运行 spid_sp_test -h 以查看内联文档。

usage: spid_sp_test [-h] [--metadata-url METADATA_URL] [--idp-metadata] [-l [LIST [LIST ...]]] [--extra] [--authn-url AUTHN_URL] [-tr] [-nsr] [-tp TEMPLATE_PATH] [-tn [TEST_NAMES [TEST_NAMES ...]]]
                    [-tj [TEST_JSONS [TEST_JSONS ...]]] [-aj ATTR_JSON] [-o REPORT_OUTPUT_FILE] [-rf {json,html}] [-d {CRITICAL,ERROR,WARNING,INFO,DEBUG}] [-xp XMLSEC_PATH] [--production]
                    [--response-html-dumps RESPONSE_HTML_DUMPS] [--exit-zero]
                    [-pr {saml2-sp,spid-sp-public,spid-sp-private,spid-sp-ag-public-full,spid-sp-ag-public-lite,spid-sp-op-public-full,spid-sp-op-public-lite,cie-sp-public,cie-sp-private,ficep-eidas-sp}]
                    [-ap AUTHN_PLUGIN] [-rm REQUEST_METHOD] [-rb REQUEST_BODY] [-rct REQUEST_CONTENT_TYPE] [-prs] [-pas] [--xsds-files-path XSDS_FILES_PATH] [-v]


src/spid_sp_test/spid_sp_test -h for help

通过传递文件测试元数据

spid_sp_test --metadata-url file://metadata.xml

从 URL 测试元数据

spid_sp_test --metadata-url https://127.0.0.1:8000/spid/metadata

一个非常标准的测试

spid_sp_test --metadata-url https://127.0.0.1:8000/spid/metadata --authn-url https://127.0.0.1:8000/spid/login/?idp=https://127.0.0.1:8088 --extra

仅打印 ERRORs

spid_sp_test --metadata-url https://127.0.0.1:8000/spid/metadata --authn-url https://127.0.0.1:8000/spid/login/?idp=https://127.0.0.1:8080 --extra --debug ERROR

JSON 报告,使用 -o filename.json 将其写入文件,使用 -rf html -o html_report/ 将其导出到 HTML 页面

spid_sp_test --metadata-url https://127.0.0.1:8000/spid/metadata --authn-url https://127.0.0.1:8000/spid/login/?idp=https://127.0.0.1:8080 --extra -rf json

给定一个元数据文件和一个 authn 文件(例如 tests/metadatatests/authn)导出所有测试响应,而无需将它们发送到 SP

spid_sp_test --metadata-url file://tests/metadata/spid-django-other.xml --authn-url file://tests/authn/spid_django_post.html --extra --debug ERROR -tr -nsr

获取要发送到 SP 的自定义属性集的响应(测试 1),而无需实际发送。它只会将其打印到 stdout

spid_sp_test --metadata-url file://tests/metadata/spid-django-other.xml --authn-url file://tests/authn/spid_django_post.html --extra --debug ERROR -tr -nsr -tn 1 -aj tests/example.attributes.json

常见用法

测试一个带有 SAMLDS (DiscoveryService) 的 Shibboleth SP。在这个例子中,target 指向目标服务,而 entityID 是选定的 IdP。这个例子也适用于 Shibboleth IdP-SP 代理/网关。

spid_sp_test --metadata-url https://sp.testunical.it/pymetadata_signed.xml --authn-url "https://sp.testunical.it/Shibboleth.sso/Login?target=https://sp.testunical.it/secure/index.php&entityID=https://127.0.0.1:8080" --debug ERROR --extra -tr

使用其 authn 插件和支持 idp 暗示的 SP 测试 Satosa-Saml2Spid

spid_sp_test --metadata-url https://127.0.0.1:10000/spidSaml2/metadata --authn-url "https://127.0.0.1:8000/saml2/login/?idp=https://127.0.0.1:10000/Saml2IDP/metadata&next=/saml2/echo_attributes&idphint=https%253A%252F%252Flocalhost%253A8080" -ap spid_sp_test.plugins.authn_request.SatosaSaml2Spid --extra -tr

测试响应和 html 转储

通过启用 --response-html-dumps HTML_PATH 选项启用响应转储,您将获得 N 个 html 文件(您的 SP 的页面),如下所示

  • 测试描述,带注释
  • SAML 响应已发送,带注释
  • SP html 页面,带有绝对 src 和 href(感谢 lxml)

这里 是一个示例1_True.html,其中 1 是测试名称,而 True 是状态。

扩展测试

spid-sp-test 提供了扩展和配置新响应测试以执行的可能性。用户可以

  • 通过配置一个类似于 tests/example.test-suite.json 的 json 文件来自定义要运行的测试套件,并通过 --test-jsons 选项传递它。可以输入多个 json 文件,通过空格分隔

  • 通过配置类似于 example/example.attributes.json 的 json 文件来自定义要返回的属性,并通过 --attr-json 选项传递它

  • 将XML模板自定义以供测试使用,在配置文件中通过--test-jsons指定它们,并通过--template-path选项指定模板目录。这些模板由Jinja2驱动,因此可以使用我们偏好的值扩展src/spid_sp_test/responses/templates/base.xml

  • 自定义获取SAML2 Authn请求的方式,使用您自己编写的插件。如果您在使用自定义API的某些OAuth2/OIDC前端与IAM代理,您可以编写自己的插件并在cli参数中使用它,例如:spid_sp_test --metadata-url https://127.0.0.1:8000/spid/metadata --extra --authn-url https://127.0.0.1:8000/spid/login/?idp=https://127.0.0.1:8080 --debug INFO -tr --authn-plugin spid_sp_test.plugins.authn_request.Dummy

  • 使用ENV变量自定义entityid和证书路径的运行时。文件必须命名为private.keypublic.cert

    IDP_ENTITYID=https://your.idp.eid/ IDP_CERT_PATH=../spid-django/example/certificates spid_sp_test --idp-metadata
    

查看src/spid_sp_test/responses/settings.pytests/example.test-suite.json,我们发现每个测试都有一个response属性。在配置中配置的每个元素都会覆盖模板中将渲染的值。每个模板都可以从其模板上下文加载这些变量,或者使用在其中静态定义的变量。

最后,您可以根据自己的喜好选择一些内置功能和选项。

Docker

在开始之前,您必须获取italia/spid-sp-test镜像。您可以从Docker Hub拉取它

$ docker pull ghcr.io/italia/spid-sp-test:latest

或本地构建

$ docker build --tag italia/spid-sp-test:latest .

容器的工作目录设置为/spid,因此,本地文件应相对于/spid路径进行挂载。

$ docker run -ti --rm \
    -v "$(pwd)/tests/metadata:/spid/mymetadata:ro" \
    -v "$(pwd)/tests/metadata:/spid/dumps:rw" \
    italia/spid-sp-test:v1.1.5 --metadata-url file://mymetadata/spid-django-other.xml

单元测试

这是为开发者准备的。

pip install requirements-dev.txt
pytest -v --cov=spid_sp_test --cov-report term  tests/

如果您需要Docker,可以进行以下操作

  1. 创建开发者镜像
docker build -f Dockerfile-devenv --no-cache . --tag italia/spid-sp-test-devenv
  1. 在开发镜像上运行覆盖率测试
docker run italia/spid-sp-test-devenv
  1. 如果您需要将镜像用作开发机器或检查环境,您可以使用以下方式访问它
docker run -it --entrypoint /bin/bash italia/spid-sp-test-devenv
  1. 最后一步是在您的宿主机器和开发Docker实例之间进行实时编码,使用卷
docker run -it -v $(pwd):/tmp/src --entrypoint /bin/bash italia/spid-sp-test-devenv

作者

参考

TLS/SSL测试

项目详情


发布历史 发布通知 | RSS订阅

下载文件

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

源分布

spid_sp_test-1.2.16.tar.gz (2.4 MB 查看哈希值)

上传时间

构建分布

spid_sp_test-1.2.16-py3-none-any.whl (2.5 MB 查看哈希值)

上传时间 Python 3

由以下组织支持