统一认证集成组件介绍

组件支持对接已有的 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   作者:呼丽华