统一认证集成组件介绍
组件支持对接已有的 CAS认证服务、OAuth认证服务。
je-web模块修改配置
1、pom.xml增加依赖
<!-- JEPaaS Auth -->
<dependency>
<groupId>com.je</groupId>
<artifactId>je-plugin-cas-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.je</groupId>
<artifactId>je-plugin-oauth-client</artifactId>
<version>1.0.0</version>
</dependency>
2、 web.xml修改
配置统一认证Filter
<!-- 统一认证过滤器 -->
<filter>
<filter-name>authFilter</filter-name>
<filter-class>com.je.auth.core.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、 cas.xml
在resources/xxx 目录下新建文件
<?xml version="1.0" encoding="UTF-8"?>
<cas>
<!--
不指定前缀的参数如 casServerUrlPrefix ,所有的 filter 都可以使用;
使用如下前缀可以为指定Filter配置参数
singleSignOutFilter ==> SingleSignOutFilter,
authenticationFilter ==> AuthenticationFilter,
validationFilter ==> Cas30ProxyReceivingTicketValidationFilter
如:<authenticationFilter.serverName>http://127.0.0.1:8080</authenticationFilter.serverName>
可以向 authenticationFilter 中添加name为 serverName 的init-param。
-->
<!-- 本应用地址 -->
<serverName>http://127.0.0.1:8080</serverName>
<!-- cas服务地址 -->
<casServerUrlPrefix>https://cas.example.org:8443/cas</casServerUrlPrefix>
<!-- cas服务登录地址 -->
<casServerLoginUrl>https://cas.example.org:8443/cas/login</casServerLoginUrl>
<!-- cas服务退出登录地址 -->
<casServerLogoutUrl>https://cas.example.org:8443/cas/logout</casServerLogoutUrl>
<!-- Cas30ProxyReceivingTicketValidationFilter 相关配置-->
<redirectAfterValidation>true</redirectAfterValidation>
<useSession>true</useSession>
<authn_method>mfa-duo</authn_method>
<!-- 已使用 security-url.xml 替代 -->
<except-security-url/>
</cas>
自定义代码
1、CAS
CAS 基于 cas-client-core 标准CAS进行拓展。
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.6.2</version>
</dependency>
je-plugin-cas-client
默认使用 Assertion.getPrincipal().getName(
作为USERCODE
查找JEPaaS用户。如果想修改条件可以实现 CasAuthInfoParse
接口, 如下示例。
@Service
public class CasAuthInfoParseDemo implements CasAuthInfoParse {
@Autowired
private MetaService metaService;
/**
* cas信息作为USERID查找本系统用户
*
* @param assertion cas认证信息
* @return 本系统用户信息
*/
@Override
public DynaBean parse(Assertion assertion) {
String userId = assertion.getPrincipal().getName();
List<DynaBean> users = metaService.select("JE_CORE_ENDUSER",
ConditionsWrapper.builder(" USERID = {0}", userId));
return users.get(0);
}
}
如果使用了非标准CAS或二次修改过的CAS认证服务,并且CAS认证服务提供了自己的 client jar包,这种情况可以使用 JE_AUTH_CAS_FILTER_CLASS
JE_AUTH_CAS_FILTER_PARAMS
两个变量配置上 client jar中的 Filter类
和相关参数(详见系统变量),配置完成将不会使用 je-plugin-cas-client
而是使用自己的 CAS client。
2、OAuth
OAuth需要自定义代码才可以使用,实现 OAuth2Service
接口, userId(OAuthConfig authConfig, String code, Map<String, String[]> params)
方法。userId 方法会将 OAuth回调认证码 以及 OAuth配置信息 作为入参传入,方法中自行调用OAuth认证服务获取用户信息,返回值为JEPaaS用户ID。
@Service
public class OAuth2ServiceImpl implements OAuth2Service {
/**
* 根据认证信息获取用户主键
*
* @param authConfig OAuth配置信息
* @param code OAuth回调返回的预授权码
* @param params 回调返回的所有参数
* @return java.lang.String
*/
@Override
public String userId(OAuthConfig authConfig, String code, Map<String, String[]> params) {
return null;
}
}
系统变量
1、 通用
变量编码 | 变量名称 | 说明 |
---|---|---|
JE_AUTH_TYPE | 统一认证模式 | 值为(CAS/OAuth2),表示当前使用的CAS认证还是OAuth认证 |
JE_AUTH_INDEX | 配置主页地址 | 如 http://127.0.0.1:1120/index.html |
JE_AUTH_LOGIN | 配置登录页地址 | 如 http://127.0.0.1:1120/login.html |
JE_AUTH_RETAIN_LOGIN | 保留系统登录 | 值(0/1), 默认为0。当开启CAS或OAuth后,默认进入认证服务的登录页,通过此变量可保留系统原有登录 |
2、 OAuth2
变量编码 | 变量名称 | 说明 |
---|---|---|
JE_OAUTH2_ID | OAuthAppId | OAuth认证服务提供的客户端标识 |
JE_OAUTH2_SECRET | AppSecret | OAuth认证服务提供的客户端密钥 |
JE_OAUTH2_OTHER_CONFIG | 拓展配置 | JSON格式。一些OAuth服务需要的其他配置,通过 OAuthConfig.getOtherConfig() 获取。(OAuthConfig在OAuth自定义代码部分) |
JE_OAUTH2_ACCESS_TOKEN_URL | 获取AccessToken接口 | OAuth认证服务接口。后端通过 OAuthConfig 获取。 |
JE_OAUTH2_USER_URL | 用户身份验证接口 | 通过回调code与AccessToken获取用户身份的接口。后端通过 OAuthConfig 获取。 |
JE_OAUTH2_CALLBACK | 获取AccessToken接口 | OAuth回调地址,在JE_OAUTH2_REDIRECT_URL的变量会用到。例如 http://127.0.0.1:8080/oauth2_callback |
JE_OAUTH2_REDIRECT_URL | 统一认证地址 | OAuth的登录页地址。可使用变量有 callbackUr(JEPaaS接收OAuth回调信息的地址)、appId(OAuthAppId)、state(JEPaaS状态码),这些变量后端会替换为具体值。 例如 https://oauth.com/login?redirect_uri={callbackUrl}&app_id={appId}&state={state} |
JE_AUTH_OAUTH2_MODIFY_URL | 修改密码 | OAuth修改密码地址,配置后在JEPaaS右上角点击修改密码,会进入OAuth修改密码地址。 |
JE_AUTH_OAUTH2_LOGOUT_URL | 退出地址 | OAuth退出登录地址,配置后在JEPaaS右上角点击退出登录,会退出JEPaaS 然后跳转到OAuth退出登录地址。 |
JE_AUTH_OAUTH2_FILTER_CLASS | 自定义的OAuthFilter | 填写全类名,如com.custom.filter.XXXFilter 。使用此配置后je-plugin-oauth-client 插件将无效 |
JE_AUTH_OAUTH2_FILTER_PARAMS | 自定义Filter配置 | JSON格式。代码中将以 FilterConfig 的形式传入Filter的init方法中 |
3、 CAS
变量编码 | 变量名称 | 说明 |
---|---|---|
JE_AUTH_CAS_MODIFY_URL | 修改密码 | CAS修改密码地址,配置后在JEPaaS右上角点击修改密码,会进入CAS修改密码地址。 |
JE_AUTH_CAS_LOGOUT_URL | 退出地址 | CAS退出登录地址,配置后在JEPaaS右上角点击退出登录,会退出JEPaaS 然后跳转到CAS退出登录地址。支持使用indexUrl变量,值为JEPaaS首页地址,如 https://cas.example.org:8443/cas/logout?logoutRedirectUrl={indexUrl |
JE_AUTH_CAS_FILTER_CLASS | 自定义的Filter | 填写全类名,如com.custom.filter.XXXFilter 。使用此配置后je-plugin-cas-client 插件将无效 |
JE_AUTH_CAS_FILTER_PARAMS | 自定义Filter配置 | JSON格式。代码中将以 FilterConfig 的形式传入Filter的init方法中 |
最后编辑: 呼丽华 文档更新时间: 2024-08-21 10:58 作者:呼丽华