dgp.filter.http.auth.saml 过滤器允许 Pixiu 作为一个 SAML Service Provider(SP,服务提供方)运行。
启用后,Pixiu 可以:
SAMLResponse常见的 IdP 包括 Keycloak、Okta 和 Microsoft Entra ID。
/app。SAMLResponse。http_filters:
- name: "dgp.filter.http.auth.saml"
config:
entity_id: "pixiu-saml-sp"
acs_url: "https://pixiu.example.com/saml/acs"
metadata_url: "https://pixiu.example.com/saml/metadata"
idp_metadata_url: "https://idp.example.com/app/metadata"
cert_file: "/etc/pixiu/saml/sp.crt"
key_file: "/etc/pixiu/saml/sp.key"
rules:
- match:
prefix: "/app"
forward_attributes:
- saml_attribute: "email"
header: "X-User-Email"
- saml_attribute: "displayName"
header: "X-User-Name"
如果不想通过 idp_metadata_url 拉取,也可以从本地文件加载 IdP metadata:
idp_metadata_file: "/etc/pixiu/saml/idp-metadata.xml"
entity_id:Pixiu 作为 SP 对外声明的 entity IDacs_url:Assertion Consumer Service 端点地址,用于接收 SAMLResponsemetadata_url:Pixiu 的 SP metadata 地址,提供给 IdP 管理员导入配置idp_metadata_url:Pixiu 拉取 IdP metadata 的 URLidp_metadata_file:本地 IdP metadata 文件路径,可替代 idp_metadata_urlcert_file:SP 证书文件key_file:SP 私钥文件rules:需要启用 SAML 登录保护的路径前缀forward_attributes:将 SAML assertion 属性映射到上游 HTTP 头allow_idp_initiated:面向本地 HTTP 开发测试场景的兼容开关;当浏览器在跨站 ACS POST 时丢失请求跟踪 cookie 时,可通过该开关放宽校验err_msg:SAML 认证失败时返回的本地错误消息acs_url 和 metadata_url 必须使用相同的 scheme 和 host。metadata_url 表示 SP metadata 地址,供 IdP 导入配置。idp_metadata_url 或 idp_metadata_file 用于让 Pixiu 获取 IdP 的签名证书和 SSO 端点。forward_attributes 中配置的客户端自带请求头,再写入来自 SAML assertion 的值,以避免 header spoofing。SAML 的 SP-initiated 登录流程通常依赖一个“请求跟踪 cookie”,以便在 IdP 向 ACS 发起跨站 POST 时,Pixiu 仍然能够将返回的 SAMLResponse 与先前发起的认证请求对应起来。
SameSite=None,这样浏览器才会在跨站 ACS POST 时携带该 cookie。allow_idp_initiated: true,使 ACS 流程在不依赖严格 InResponseTo 校验的情况下也能继续完成。在部分本地 HTTP 浏览器环境中,首次登录后浏览器可能不会正确返回原始业务路径,因为请求跟踪 cookie 在 ACS 跨站 POST 时被丢弃。此时本地登录 session 也可能已经创建成功。测试本地 sample 时,可在登录后重新访问 /app 进行确认。
可运行示例位于 dubbo-go-pixiu-samples 仓库中的 auth/saml。