Skip to content

sso - 单点登录扩展

单点登录扩展(Single Sign-On)帮助第三方开发者实现一个个性化的、可复用的、可配置化的单点登录扩展插件。安装单点登录扩展插件后,会在系统设置 > 单点登录中自动显示一个新的单点登录配置方案,用户选择启用后可显示扩展提供的配置参数,配置完成并保存后即可使用安装的单点登录扩展进行系统登录认证。

通过扩展插件可以实现多种常见的单点登录需求:

  1. 增加一个个性化的OAuth2单点登录机制,如支持企业微信
  2. 支持LDAP服务器、Windows域认证
  3. 支持某些特定HTTP头的身份认证
  4. 数字证书单点登录
  5. ……

扩展文件结构

ts
/
├──package.json //定义扩展的配置信息
├──main.action.ts //扩展的主体代码,提供后端的脚本逻辑
├──main.action //main.action.ts编译后产生的文件
└──thumbnail.png //缩略图

package.json

package.json中可以配置扩展提供出去的配置选项,这些选项会出现在系统设置 > 单点登录中。

json
"contributes":{
    "sso":{
        "settingsForm":{},
    }
}

main.action.ts

单点登录主要是后端的逻辑,main.action.ts是扩展的后端脚本的默认入口,定义了单点登录扩展需要实现的一些函数逻辑。

ts
/**
 * 为每项 SSO 方案创建独立运行时实例。
 *
 * 方案配置、回调 state 校验和系统用户匹配由 SuccApp 管理。扩展只负责把系统给出的
 * {@link redirectUri}{@link state} 传给第三方认证服务,并在回调时验证票据、返回可信用户属性。
 *
 * @param config 当前方案的只读配置快照。
 * @return 绑定当前方案的 SSO 运行时实例。
 */
export function createSSOProviderExt(config: Readonly<succ.sso.SSOConfig>): succ.sso.SSOProviderExt {
	return {
		checkAppSupported(request) {
			return true;
		},

		getAuthRedirectURL(request, redirectUri, state) {
			// 按第三方协议对参数编码,并把 redirectUri 和 state 原样放入授权请求。
			return undefined;
		},

		checkTicket(request, redirectUri) {
			// 从 request 读取 code/ticket,向第三方验证后返回稳定身份属性;验证失败必须抛出异常。
			return;
		},

		getLogoutRedirectURL(request, redirectUri, state) {
			// 按第三方协议对 redirectUri 和可选 state 编码;state 为空时不要生成或补写该参数。
			return;
		}
	};
}
微信公众号微信公众号:山川软件