pressbooks/pressbooks-saml-sso

Pressbooks 的 Shibboleth 单点登录集成。

安装: 114

依赖: 0

建议者: 0

安全: 0

星标: 3

关注者: 10

分支: 1

开放问题: 13

类型:wordpress-plugin

2.5.1 2024-06-12 15:33 UTC

README

贡献者: conner_bw, greatislander, richard015ar, steelwagstaff, arzola 标签: pressbooks, saml, saml2, sso, shibboleth 需要至少: 6.5 测试到: 6.5

稳定版本: 2.5.1

需要 PHP: 8.1 许可证: GPLv3 或更高版本 许可证 URI: https://gnu.ac.cn/licenses/gpl-3.0.html

Pressbooks 的 SAML2 单点登录集成。

描述

Packagist GitHub release Travis Codecov

插件,用于将 Pressbooks 与 SAML2 单点登录服务集成。(例如:Shibboleth、Microsoft ADFS、Google Apps 等。)

尝试登录 Pressbooks 的用户将被重定向到 Shibboleth 或 SAML2 身份提供者。在验证用户的凭据后,用户将被重定向回 Pressbooks 网络。如果我们通过 UID(存储在 user_meta 表中)匹配到 Pressbooks 用户,则用户被视为有效并被允许访问。如果没有匹配项,则尝试通过电子邮件匹配 Pressbooks 用户(并将成功的匹配项存储在 user_meta 表中供下次使用)。如果用户在 Pressbooks 中没有账户,可以创建新用户,或者根据配置拒绝访问。

限制:此插件不支持多边 Shibboleth 的身份验证。在非联合、双边配置中,使用单个 IdP。

安装

composer require pressbooks/pressbooks-saml-sso

或者,从发行页面下载最新版本,并将其解压缩到您的 WordPress 插件目录中: https://github.com/pressbooks/pressbooks-saml-sso/releases

然后,创建必要的证书

cd vendor/onelogin/php-saml/certs
openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out sp.crt -keyout sp.key

然后,在网络级别激活并配置插件。

安全注意事项

vendor/onelogin/php-saml/certs 中生成证书,而不做任何进一步更改,会使其对恶意用户开放(例如:https://path/to/vendor/onelogin/php-saml/certs/sp.crt)。此外,您的证书在通过 composer update 或类似命令更新包时可能被删除。合格的系统管理员必须确保证书不可从互联网访问且不会被删除。强烈建议您通过配置变量传递证书。示例

add_filter( 'pb_saml_auth_settings', function( $config ) {
	$config['sp']['x509cert'] = file_get_contents( '/path/to/sp.key' );
	$config['sp']['privateKey'] = file_get_contents( '/path/to/sp.crt' );
	return $config;
} );

或者

define( 'PHP_SAML_SP_KEY_PATH', '/path/to/sp.key' );
define( 'PHP_SAML_SP_CERT_PATH', '/path/to/sp.crt' );

IdP 设置

在插件激活后,"集成"下的网络管理界面中添加了一个子菜单项("SAML2")。这会引导到 SAML2 设置页面。您的元数据 XML 可以从这个页面下载。

插件要求响应的断言元素被签名。

插件在响应中查找以下属性

  • 需要: urn:oid:0.9.2342.19200300.100.1.1(samAccountName 或等效,理想情况下与 FriendlyName uid 相匹配)
  • 强烈推荐: urn:oid:0.9.2342.19200300.100.1.3(email-address 或等效,理想情况下与 FriendlyName mail 相匹配)。如果没有可用值,则回退到 uid@127.0.0.1
  • 可选: urn:oid:1.3.6.1.4.1.5923.1.1.1.6(eduPersonPrincipalName 或等效)。对于给定用户的首次启动,如果邮件无法与现有人员匹配,并且此值存在,我们将尝试使用它。

电子邮件可以进行过滤,例如: add_filter( 'pb_integrations_multidomain_email', function( $email, $uid, $plugin ) { /* 自定义使用场景,返回 $email */ }, 10, 3 );

因为这个插件使用了卓越的 onelogin/php-saml 工具包,许多其他配置变量可以进行修改

发送日志

如果您使用AWS并且想在服务器上记录SAML尝试,您需要定义一些环境变量,这些变量是在托管Pressbooks实例的服务器上。

AWS S3

定义以下环境变量

 LOG_LOGIN_ATTEMPTS (setting this value to true will enable this feature at the infrastructure level)
 AWS_ACCESS_KEY_ID
 AWS_SECRET_ACCESS_KEY
 AWS_S3_OIDC_BUCKET
 AWS_S3_REGION
 AWS_S3_VERSION

在这些变量被正确定义后,关于SAML登录尝试的基本信息将被记录到您的S3存储桶中。每月将创建一个新的CSV文件,以便日志保持可读性。日志存储将采用如下文件夹结构:S3 存储桶 > saml_logs > {ENVIRONMENT} > {通过 wp_hash 函数哈希的网络URL} > {YYYY-MM} > saml_logs.log

AWS CloudWatch 日志

定义以下环境变量

 LOG_LOGIN_ATTEMPTS (setting this value to true will enable this feature at the infrastructure level)
 AWS_ACCESS_KEY_ID
 AWS_SECRET_ACCESS_KEY
 AWS_S3_REGION
 AWS_S3_VERSION

在这些变量被正确定义后,关于SAML登录尝试的基本信息将以JSON格式记录在您的AWS CloudWatch 日志服务中。您需要创建一个名为 pressbooks-logs 的新日志组。

屏幕截图

SAML2 Administration.

Metadata XML.

变更日志

请参阅 变更日志 文件获取更多信息。