【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

登录:指通过某种介质(帆软中一般是http请求的参数/header/body),向某一特定的身份识别系统证明自己身份的过程。

单点:是指多个业务系统能够经由统一的身份识别门户,进行统一身份认证和授权的过程,在这个过程中,各业务系统本身是无需直接去鉴别用户身份的,而是统一信任门户提供的授权信息。

二、背景、场景介绍

AccessProvider接口是用于扩展第三方认证方式的隐式登录接口,注意该接口面对的主要场景是登录,不是单点。通常用来为移动端的第三方唤醒登录集成提供入口或某些直接调用登录接口的第三方授权登录调用。不经常做单点和纯登录的开发者可能一下子看不太清晰这里面的区别。可以直接先看下文的接口介绍和后续的使用说明会更清晰一些。

三、接口介绍

AccessProvider.java
package com.fr.decision.fun;

import com.fr.stable.fun.mark.Mutable;

/**
 * Created by Zed on 2018/9/10.l
 */
public interface AccessProvider extends Mutable {

    /**
     * 标志
     */
    String MARK_STRING = "AccessProvider";

    /**
     * 等级
     */
    int CURRENT_LEVEL = 1;

    /**
     * 自定义登录验证方法
     *
     * @param username 用户名
     * @param password 密码
     * @param ticket   第三方的认证门票
     * @return 登录验证是否通过
     */
    boolean access(String username, String password, String ticket);

    /**
     * 自定义登录验证方法
     *
     * @param username 用户名
     * @param password 密码
     * @param ticket   第三方的认证门票
     * @return 用户名
     */
    String auth(String username, String password, String ticket);
}


四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

plugin.xml
<extra-decision>
    <AccessProvider class="your class name"/>
</extra-decision>

六、原理说明

平台登录服务入口在LoginResource,其中包含了一个 POST /login/third/auth  BODY = ThirdAuthInfoBean 的接口。该方法调用了LoginService#login(HttpServletRequest , HttpServletResponse, username, password,  thirdToken)方法进行登录。在该方法中,调用了插件中申明的所有AccessProvider接口进行身份验证。

七、特殊限制说明

该接口可以在一次登录接口调用中生效多个插件的实例,多个实例只要其中一个认证通过就算整体认证通过,未执行的认证接口方法就不会再执行。

该接口在18年9月13号以后的帆软版本中可以使用。在20年10月16号及以前的版本中只能使用其中的access接口方法,之后的版本中推荐使用auth接口,实现更加灵活。此时的access接口方法仅用于兼容之前的接口。

access接口方法和auth接口方法两个只需要实现一个即可。

该接口主要只用于第三方登录,而不是单点。如果要使用这个接口进行单点,那么需要额外配合GlobalRequestFilterProvider这类过滤接口才行。

该登录接口本身会跳过标注产品的一切数据登录安全校验,比如单一登录、验证码、ip/账号锁等等逻辑,所以如果实际场景有这些需要的需要手动调用。

八、常用链接

demo地址:demo-access-provider

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。

暂无

  • No labels