webserver

command module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2022 License: Apache-2.0 Imports: 5 Imported by: 0

README

Coreplus Web Server

基于fiber的http server
用于Host前端静态文件,基本上是webpack打包之后的dist文件

基础的能力:
  • ✅SSO(CAS)[TODO:OAUTH2、内部认证中心]
  • ✅CSRF 防护
  • ✅流式文件处理,206
  • 对接minio作为静态资源
运行
#二进制
cws --help
Coreplus Web Server

Usage:
  cws [flags]

Flags:
  -c, --config-file string   配置文件 (default "config/config.yaml")
  -h, --help                 help for cws

#docker
docker run -d --name cws \
  -p 80:80 \
  -v /path/to/your/static/files:/app/static \
  -v /path/to/config/file.yaml:/app/config/config.yaml \
  registry.sudytech.com:35000/coreplus-webserver:0.0.3
中间件:authZ

如果采用sidecar或者有envoy的版本,请关闭此插件
按照envoy的external authZ协议实现本地将请求封装提交到后端的auth server
主要通过本插件实现IAP逻辑

authz:
  enabled: false
  routeMatchExpr: "/api/.*"
  backend: 127.0.0.1:52001
  # 如果grpc服务失败,是否拒绝 true:服务不存在或者失败忽略校验,false:服务不存在或者失败则拒绝
  failover: false
  includeBody: false
  bodySizeInBytes: 0
中间件:cas代理

代理会根据配置转去SSO服务,完成登录后,会重写本域内的cookie
配置中设定了跳过SSO的路由前缀,请注意/a会包含/api,所以如果要针对具体的path,正确区分/a和/a/

authProxy:
  enabled: false #是否启用
  mode: cas #cas或者oauth2
  cas:
    baseUrl: http://test.sudytech.edu.cn/cas
    loginUrl: http://test.sudytech.edu.cn/cas/login
    logoutUrl: http://test.sudytech.edu.cn/cas/logout
    validateUrl: http://test.sudytech.edu.cn/cas/serviceValidate
    clientSecret: 28fbbc96-6171-4de7-89ca-454293f824cb
    cookieName: _sop_session_
    skipRoutePrefix:
      - "/b"

对于开启了认证代理的路由,最终的请求必然会对cookie的jwt信息进行校验,这一点和jwt中间件无关
如果jwt验证失败,则返回500错误,不跳转到SSO的原因是防止死循环

中间件:jwt

jwt中间件是为了实现将cookie中的jwt信息解码成json,通过Header传递到upstream中
这样可以简化后端服务对认证信息的解码工作,直接从Header中提取响应的数据即可

jwt:
  enabled: true
  cookieName: _sop_session_
  decoder: normal
  secret: 28fbbc96-6171-4de7-89ca-454293f824cb
  passHeaderName: X-User-Info
  routes:
    - /a/

decoder是解码器,默认是normal,对于内部认证中心或者能力网关的jwt解码将在后续补充
secret必须是jwt加密的key,如果jwt是SSO代理产生,需要和sso代理中配置的client_secret相同
jwt插件和SSO代理插件可以配合使用,但是并不强制,可以由应用或者7层代理产生cookie,通过jwt插件解码
TODO:增加对jwt信息的提取位置配置,可以是cookie,header的bearer或者url param

路由配置

路由支持:

  • 内嵌资源
  • 静态资源,例如webpack的编译产物,图片和视频
  • 动态资源,这里主要是指upstream
routes:
  - type: embed
    prefix: "/welcome"
  - type: static
    backend: ./static
    prefix: "/"
  - type: dynamic
    backend: "http://127.0.0.1:8000"
    prefix: "/b"
    stripPrefix: true

内嵌资源采用go 1.16的embed特性,需要在编译的时候将资源放入sui/webui,不支持运行时配置。 如果想要展示演示片,可以将webpack编译后的dist或者build目录复制进

路由的type包括static和dynamic
静态路由,backend是静态资源路径,prefix是路由,支持流式媒体

⚠️静态路由和内嵌资源可能存在潜在的冲突
由于通常前端资源都直接编译输出到/,因此如果嵌入资源可能配置为/之后,任何静态资源都会属于嵌入资源的范畴
所以我们建议将嵌入资源路由定义为**非/路径,将/路径交给static
除非我们的服务主要以api为主,这样可以把/让给嵌入资源

动态路由,backend配置后端地址,stripPrefix指定是否在路由到upstream的时候对请求的原始url进行去前缀,例如:
请求的uri=/a/b?c=d,设定stripPrefix=true,prefix=/a路由到后端的请求uri为/b?c=d

由于本系统/x//x代表不同路由,因此在动态路由的配置上,为了避免/a包含/api的匹配规则,请谨慎设置prefix避免包含冲突。
通常路由的前缀设置采用长度优先规则,即最长的路由最前置

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
middleware

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL