# 扩展认证模式

编排中,如 HTTP 请求节点里可以看到有认证模式的选项,我们现在默认提供的认证模式有两种,分别是【本地身份认证】和【客户端身份认证】:

  • 本地身份认证:若当前请求携带身份即 Access Token,则将该 at 添加到请求头中
  • 客户端身份认证:获取工程当前客户端的 Access Token,将该 at 添加到请求头中

上列几种认证模式基本能覆盖大部分场景,针对更复杂的场景我们可以拓展认证模式来使得请求正常。

# 自定义&拓展

我们需要编写 Java 代码实现接口并注册来自定义认证模式。需要特别注意的是,每个认证模式都有固定的编码key,自定义模式的key建议携带项目特定前缀,以防止与低代码的内置模式产生冲突,默认模式 key 如下:

  • 本地身份认证:local
  • 客户端身份认证:clientOnly

假设拓展一个 key 为demoAuth的认证模式,示例如下:

  1. 添加自定义认证解析类
import openfuse.serverlessworkflow.core.auth.AuthResolver;

/**
 * 自定义认证解析类
 */
public class DemoAuthResolver implements AuthResolver {

    @Override
    public void resolve(AuthResolverContext context) {
        Object request = context.getRequest();
        if (request instanceof HttpMessage) {
            // todo:
            String accessToken = null;
            headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken);
        }
    }

    /**
     * 根据 key 匹配到该解析类,随后将执行 #resolve(AuthResolverContext) 方法
     */
    @Override
    public boolean supports(AuthResolverContext context) {
        return "demoAuth".equals(context.getMetadata().get("localMode"));
    }
}

注册为 bean:

@Bean
DemoAuthResolver demoAuthResolver() {
    return new DemoAuthResolver();
}
  1. classpath*:serverless/auth.json添加配置,使得界面增加显示自定义认证模式:
[
    {
        "name": "demoAuth",
        "title": "示例认证模式",
        "scheme": "bearer",
        "properties": {
            "metadata": {
                "localMode": "demoAuth"
            },
            "token": "custom-extend-auth"
        }
    }
]

上例 json 中,"scheme": "bearer"表示为 bearer 类的认证方式,"token": "custom-extend-auth"表示为拓展的认证方式,这两个一般不需要修改,其他配置根据情况调整。

顶部