背景介绍
作为企业实践,在应用程序中应用单点登录 (SSO) 是很常见的,这样可以通过集中且安全的方式管理用户凭证。
基于 Streampark 使用 Apache Shiro 进行身份验证和授权的事实,我们将使用 Pac4j 框架来实现单点登录 (SSO) 支持功能。 Pac4j 是 Shiro 社区推荐的 SSO 集成解决方案,也被其他 Apache 项目应用,如 Knox、Durid、Zeppelin 等。
SSO 登录工作流
我们提出了三个主要用例,其工作流程如下所示:
a) SSO启用时,新用户登录

b) SSO启用时,现有用户登录

c) SSO未启用时,用户登录

如何启用SSO登录
- 从配置文件
application.yml启用SSO:
...spring:profiles:active: mysql #[h2,pgsql,mysql]include: sso...sso:# If turn to true, please provide the sso properties the application-sso.ymlenable: true
- 选择第三方方式,例如Github或谷歌登录,参数设置细节可参照pac4j配置指引, 并填写如下所示的
application-sso.yml配置:
pac4j:callbackUrl: http://localhost:10000/callback# Put all parameters under `properties`# Check supported sso config parameters for different authentication clients from the below link# https://github.com/pac4j/pac4j/blob/master/documentation/docs/config-module.mdproperties:# principalNameAttribute:# Optional, change by authentication client# Please replace and fill in your client config below when enabled SSOprincipalNameAttribute: emailoidc:type: googleid: xxxsecret: xxxuseNonce: true# github:# id: xxx# secret: xxx
- 重启Streampark,检查是否会重定向至正确的第三方登录页,并成功完成登录过程:



注意事项
新用户通过SSO登录后,其帐户将自动添加到streampark中。但管理员仍然需要手动将用户添加到适当的组下,否则新用户登录成功后仍然无法定向到登陆页面。
目前我们仅支持
OAuth和OpenID Connect (OIDC)作为常规支持的登录方式,如果您需要支持Saml或CAS,请转到streampark-console/streampark-console-service/pom.xml,将它们更为包含在依赖当中:
<!-- Include pac4j-config/core/oauth/oidc--><dependency><groupId>org.pac4j</groupId><artifactId>pac4j-springboot</artifactId><version>${pac4jVersion}</version><exclusions><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion><!-- cas & opensaml is not supported--><exclusion><groupId>org.pac4j</groupId><artifactId>pac4j-cas</artifactId></exclusion><exclusion><groupId>org.pac4j</groupId><artifactId>pac4j-saml-opensamlv3</artifactId></exclusion></exclusions></dependency>
