askvortsov/flarum-auth-sync

管理外部身份提供者同步

安装: 461

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 11

类型:flarum-extension


README

License Latest Stable Version

这是一个Flarum 扩展,用于在通过外部身份提供者认证时同步用户属性。此扩展提供对以下内容的同步支持:

  • 头像
  • 分组
  • 个人简介
  • 伪装属性

某些认证协议,如 SAML2、LDAP、OpenID Connect 等,可以在认证响应中发送属性。此扩展提供了一个框架,用于通过该属性响应同步用户属性和权限。

安装

使用Bazaar 或手动使用 composer 安装

composer require askvortsov/flarum-auth-sync

更新

composer update askvortsov/flarum-auth-sync

如何使用

对于 Flarum 管理员,如果您使用的是使用 Flarum 认证同步的认证扩展,您可以在 Flarum 管理员扩展页面上的设置弹出窗口中选择您想同步的属性类型。请注意,为了同步个人简介和伪装配置文件字段,您需要安装并启用 Friends of Flarum 用户个人简介Friends of Flarum 伪装 扩展。

在另一个认证扩展中使用此扩展

  • 通过 use Askvortsov\FlarumAuthSync\Models\AuthSyncEvent; 导入 AuthEventSync 模型
  • 在登录/注册用户之前,创建一个 AuthSyncEvent。例如
use Askvortsov\FlarumAuthSync\Models\AuthSyncEvent;
use use Carbon\Carbon;

...

if ($this->extensions->isEnabled('askvortsov-auth-sync') && $this->settings->get('askvortsov-saml.sync_attributes', '')) {
    $event = new AuthSyncEvent();
    $event->email="example.user@example.com";
    $event->attributes = json_encode([
        "avatar" => "https://example.com/avatar.jpg",
        "bio" => "Hello, this is my bio",
        "groups" => [1, 15, 2],
        "masquerade_attributes" => [
            "First Name" => "Example",
            "Last Name" => "User",
            "Website" => "https://example.com
        ]
    ]);
    $event->time = Carbon::now();
    $event->save();
}
  • 当然,用您身份提供者响应中的属性替换上面的通用值。
  • 属性应以 json 编码字符串的形式提供(请参阅上面的示例)。JSON 字符串应具有以下属性
    • avatar:指向用户头像的 URL。请确保文件类型与 Flarum 兼容(jpeg 或 png,我相信)。
    • groups:以逗号分隔的用户应属于的组的 ID 列表。请注意,这将添加和删除组,因此请确保包含所有所需的组。
    • bio:一个字符串,如果启用 Friends of Flarum 用户个人简介,则将同步到用户的个人简介中
    • masquerade_attributes:您想要同步的任何伪装键和属性的关联数组。请确保键与配置文件字段名称完全匹配。

这最初是为 Flarum SAML2 SSO 开发的。有关如何集成的示例,请参阅 此行

待办事项

  • 添加更好的验证和错误处理。
  • 添加一个设置以支持所有用户都应添加到的默认组以及用户永远不会同步到的组。
  • 添加 Auth Sync 事件的过期设置。
  • 添加对通过登录提供者和标识符获取用户的支持,而不仅仅是电子邮件。
  • 由于 Flarum 核心中的一个错误,当通过外部身份提供者登录时,不会触发 LoggedIn 事件。直到这个问题被修复之前,UserUpdatedListener 将监听 Serialize 事件(除那些用于伪装的事件)。当上游错误修复后,这个临时解决方案将立即被移除。

反馈

非常激动能够发布我的第一个扩展,希望未来会有更多!如果你遇到问题或有功能请求,请告诉我,我会查看一下!

链接