主题
sso - 单点登录扩展
单点登录扩展(Single Sign-On)帮助第三方开发者实现一个个性化的、可复用的、可配置化的单点登录扩展插件。安装单点登录扩展插件后,会在系统设置 > 单点登录中自动显示一个新的单点登录配置方案,用户选择启用后可显示扩展提供的配置参数,配置完成并保存后即可使用安装的单点登录扩展进行系统登录认证。
通过扩展插件可以实现多种常见的单点登录需求:
- 增加一个个性化的OAuth2单点登录机制,如支持企业微信
- 支持LDAP服务器、Windows域认证
- 支持某些特定HTTP头的身份认证
- 数字证书单点登录
- ……
扩展文件结构
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;
}
};
}