跳转至

2.1.2 集成示例


APP 对接 supOS OAuth2.0 案例

1. 背景

合作伙伴系统通过iFreame页面嵌入的方式,集成到supOS工业互联网操作系统中。

用户登录supOS系统后,点击菜单就可以直接进入合作伙伴的原型系统。

在这个过程之前需要合作伙伴将原型系统中的所有用户初始化导入到supOS中,并且实现supOS提供的OAuth2.0授权认证接口,双方系统校验用户的合法性后,方可进入原型系统的业务界面操作使用。

本文主要描述的是合作伙伴如何同步用户和实现OAuth2.0授权认证接口的说明。

2. 示例项目

3. supOS OAuth2.0授权码模式集成单点登录

3.1 时序图

时序图

3.2 集成过程

在集成之前,开发者可以获取到supOS系统的 supOS OAuth2.0 授权说明文档,本文通过WMS系统为例进行集成说明。

通常BS架构的系统后端都有一个接收请求的总入口,可能是Filter,或者是Spring的AOP;

代码解析
  • 从 cookie 获取 sessionId ;
  • 判断 sessionId 是否为空;
  • 如果为空,通过 HttpServletResponse 并且生成 sessionId 到 Cookie 中。设置 http头Location ,回调地址调用 oauth2 获得授权码接口地址,返回状态码302;
  • 重新回调到原型系统,这时 sessionId 已经有值,从 HttpServletRequest 的查询字符串中获取 code 这个 code 就是 accessCode ;
  • 再通过 accessCode 获取 accessToken ,得到当前 supOS 用户的登录 token ;
  • 调用 supOS Server API 接口,通过 accessToken 获得当前 supOS 用户的 username ;
  • 根据 username 对比原型系统的用户,判断用户是否存在、权限等;
  • 如通过验证则展示原型系统业务页面。

接收请求的总入口

3.3 本地测试集成效果

登录supOS系统后,点击左侧菜单栏后,自己就可以进入到WMS系统的首页,中间过程进行了OAuth2.0的授权操作。

集成效果

4. APP打包

详见:APP打包插件

5. k8s环境 web应用连接容器中的数据库

目前supOS版本只支持 无状态 的APP,如果APP需要引用数据库则需要手动在k8s环境上部署并初始化。操作步骤如下:

5.1 编写 mysql-deployment.yaml 脚本

apiVersion: apps/v1   // 描述RC对象的版本是v1
kind: Deployment    // 声明Deployment对象
metadata:
      name: mysql-deployment // metadata中的是对此对象的描述信息
spec:               // spec中是对资源对象的具体描述
      replicas: 1   // 创建1个副本
      selector:     // 选择器,用来选择对象的
        matchLabels:
          app: mysql
      template:      // 以下用来描述创建的pod的模版
        metadata:
          labels:   // 给以下打上标签,以供selector来选择
            app: mysql
        spec:       // 对pod模版的具体描述
          containers:   // 放入pod模版中的容器
          - name: mysql // 容器名称
            image: registry.supos.ai/dotnetcore/mysql:5.7 //镜像
            ports:
            - containerPort: 3306   //镜像端口
            env:
            - name: MYSQL_ROOT_PASSWORD     //mysql环境变量
              value: "123456"

5.2 编写 mysql-service.yaml 映射端口

我们需要创建对应的service的yaml文件。

其中的重点在于三个端口的区别:

  • 容器端口;
  • Service端口;
  • node端口号;

因此需要注意定义type=NodePort,并有对应的nodeport端口号,以便集群外访问该服务。

apiVersion: v1
kind: Service
metadata:
    name: mysql
    labels:
        name: mysql
spec:
    type: NodePort
    ports:
        - port: 3307
        protocol: TCP
        targetPort: 3307
        name: http
        nodePort: 30306
    selector:
        name: mysql

5.3 创建deployment和service

kubectl create -f mysql-deployment.yaml
kubectl create -f mysql-service.yaml

5.4 常用查看命令

  • 查看副本集replicaSet
    kubectl get rs -n namespace
    

查看副本集replicaSet

  • 查看pod
    kubectl get pod -n namepace
    

查看pod

  • 查看service
    kubectl get svc -n namepace
    

查看service

  • 查看资源的详细信息
    kubectl describe pod {pod_name}
    
    这里可以看到部署的mysql对应的节点机IP。

查看资源的详细信息

5.5 配置数据库

要使用刚才通过获取资源详细信息得到的 IP + 容器端口 的形式。

配置数据库

最后,登录supOS平台,在APP管理中,点击启动APP,就可以连上容器里的数据库了。