【PowerJob语雀转载】 用户(账号体系)配置

50 阅读3分钟

PowerJob 自 5.x 版本开始正式支持用户账号体系,为了方便各大开发者使用,PowerJob 原生提供了2种默认的账号体系(PowerJob账号体系、钉钉账号体系),同时基于高扩展性的设计理念,提供了允许开发者以极低成本接入企业内部任何账号体系的方式。

用户体系说明

PowerJob 用户体系的设计理念,是提供足够的开放性,让开发者能轻松接入企业已有的统一登录体系,降低使用成本,避免 N 个中间件 N 套账号密码的窘境。同时也对有安全性诉求的使用方更友好,可使用自己信赖的登录体系。

在此设计理念驱动下,PowerJob 主框架没有耦合任何一种登录方式,PowerJob 真正的 User 完全依赖第三方账号体系的同步。

举个例子,用户通过钉钉登录后,PowerJob 会感知到此回调,同步创建 accountType=DING,username=用户在钉钉内的唯一ID 的 PowerJob 账户。

权限体系说明

PowerJob 的用户权限体系,依照经典 RBAC(Role-Based Access Control,基于角色的访问控制)实现。

其中,角色类型定义如下:

  • APP:权限范围收口在 APP 内部,仅拥有某个 App 的某个角色。比如拥有 App 的 DEVELOPER 权限,可对该 APP 内的任务、工作流、容器执行读、运维、写操作。
  • Namespace:权限范围收口在 Namespace 纬度,包括对 namespace 的直接权限与 namespace 下所关联的全部 APP的穿透权限。比如拥有某个 namespace 的 DEVELOPER 权限,可对该 namespace 管理的全部 APP 内的任务、工作流、容器执行读、运维、写操作。
  • GLOBAL:全局,目前仅开放了 GLOBAL + SU 的配置,即 PowerJob 全局超级管理员,拥有一切权限。

每个角色拥有的权限定义如下:

角色\权限READ****读WRITE****写OPS****运维SU****超级权限
OBSERVER观察者Y
QA测试人员YY
DEVELOPER开发者YYY
Admin管理员YYYY

支持的账号体系

PowerJob 账号体系

不过多介绍,简单的注册、登录功能。

钉钉账号体系

open.dingtalk.com/document/or…

# 钉钉应用 AppKey
oms.auth.dingtalk.appkey=dinggzqqzqqzqqzqq
# 钉钉应用 AppSecret
oms.auth.dingtalk.appSecret=iY-FS8mzqqzqq_xEizqqzqqzqqzqqzqqzqqYEbkZOal
# 回调地址,powerjob 前端控制台地址,即 powerjob-console 地址,比如本地调试为 http://localhost:7700,部署后则为 http://try.powerjob.tech
oms.auth.dingtalk.callbackUrl=http://localhost:7700

自定义账号体系

基于 PowerJob 强大而灵活的扩展性设计,仅需要开发者自行在 powerjob-server 实现 tech.powerjob.server.auth.login.ThirdPartyLoginService接口,适配企业自己的账号体系,即可接入。以下为详细说明。

接口定义

public interface ThirdPartyLoginService {

    /**
     * 登陆服务的类型
     * @return 登陆服务类型,比如 PowerJob / DingTalk
     */
    LoginTypeInfo loginType();

    /**
     * 生成登陆的重定向 URL
     * @param httpServletRequest http请求
     * @return 重定向地址
     */
    String generateLoginUrl(HttpServletRequest httpServletRequest);

    /**
     * 执行第三方登录
     * @param loginRequest 上下文
     * @return 登录地址
     */
    ThirdPartyUser login(ThirdPartyLoginRequest loginRequest);

    /**
     * JWT 登录的回调校验
     * @param username 用户名称
     * @param tokenLoginVerifyInfo 二次校验信息
     * @return 是否通过
     */
    default boolean tokenLoginVerify(String username, TokenLoginVerifyInfo tokenLoginVerifyInfo) {
        return true;
    }
}

可以参考官方的2个实现理解,比较简单不多赘述。