zoukankan      html  css  js  c++  java
  • Spring Cloud Data Flow整合UAA使用外置数据库和API接口

    我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶!

    1 前言

    之前的文章《Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制》介绍了如何用UAA来保护Spring Cloud Data Flow,但使用是内存数据库,重启UAA后就丢失了配置信息。而且需要通过Ruby gem安装uaac命令行工具,有点麻烦,比较不是所有人都会使用Ruby的。

    本文将解决这两个问题,问题一通过引入PostgreSQL来解决;问题二通过UAA REST API来解决。

    Spring Cloud Data Flow相关文章:

    Spring Cloud Data Flow初体验,以Local模式运行

    把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试

    Spring Cloud Data Flow用Shell来操作,方便建立CICD

    被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题

    2 连接PostgreSQL数据库

    为方便,我们通过Docker来启动PostgreSQL,可以参考《Docker启动PostgreSQL并推荐几款连接工具》,命令如下:

    docker run -itd 
        --name pkslow-postgres 
        -e POSTGRES_DB=pkslow 
        -e POSTGRES_USER=pkslow 
        -e POSTGRES_PASSWORD=pkslow 
        -e PGDATA=/var/lib/postgresql/data/pgdata 
        -p 5432:5432 
        postgres:10
    

    配置uaa.yml连接数据库如下:

    spring_profiles: default,postgresql
    
    database:
      driverClassName: org.postgresql.Driver
      url: jdbc:postgresql://localhost:5432/pkslow
      username: pkslow
      password: pkslow
      maxactive: 15
      maxidle: 10
      minidle: 3
      removeabandoned: false
      logabandoned: true
      abandonedtimeout: 300
      evictionintervalms: 15000
      caseinsensitive: false
    

    配置完成启动UAA,就可以看到PostgreSQL已经自动生成了许多相关的表了。

    这些表还是非常有用的,你可以看到一些默认的配置及关联性。表结构和数据是了解逻辑的一个重要入口。

    3 通过UAA API配置

    之前我们是通过uaac命令来创建客户端、群组和用户等,这次我们不再依赖uaac,而是通过访问Api来操作。要使用之前,我们需要添加Json依赖,否则会报错。如下:

    <!--json-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9</version>
    </dependency>
    

    (1)获取admin的Token

    我们要进行操作,首先要有admin管理员的账号,默认用户名和密码是admin:adminsecret,获取它的Token命令如下:

    curl -v -d "username=admin&password=adminsecret&client_id=admin&grant_type=client_credentials" -u "admin:adminsecret" http://localhost:8080/uaa/oauth/token
    

    UAA服务器则会返回一个很长的Token,我们需要把它记录下来,后续都要使用到它。

    (2)创建客户端

    一个客户端对应一个应用的鉴权,这里创建一个名叫dataflow的客户端,命令如下:

    curl 'http://localhost:8080/uaa/oauth/clients' -i -X POST 
        -H 'Content-Type: application/json' 
        -H 'Authorization: Bearer eyJhbGciOiJSUzI1Nxxxxxx' 
        -H 'Accept: application/json' 
        -d '{
        "name" : "dataflow",
        "client_id" : "dataflow",
      "client_secret" : "dataflow",
      "scope" : ["cloud_controller.read", "cloud_controller.write", "openid", "password.write", "scim.userids", "sample.create", "sample.view", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view"],
      "resource_ids" : [ ],
      "authorized_grant_types" : [ "password", "authorization_code", "client_credentials", "refresh_token" ],
      "redirect_uri" : [ "http://localhost:9393/login" ],
      "authorities" : ["uaa.resource", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view", "sample.view", "sample.create"],
      "token_salt" : "m6c6fB",
      "autoapprove" : "openid",
      "allowedproviders" : [ "uaa", "ldap", "my-saml-provider" ]
    }'
    

    注意:Bearer后面是adminToken,太长这里不贴出来了。

    (3)创建群组

    群组对应的是权限,只有在群组里的用户,才有相关权限。创建群组的同时,还可以添加用户,指定members就行,这里不添加。命令如下:

    curl 'http://localhost:8080/uaa/Groups' -i -X POST 
        -H 'Content-Type: application/json' 
        -H 'Authorization: Bearer eyJhbGciOiJSUzxxx' 
        -d '{
      "displayName" : "dataflow.view",
      "description" : "dataflow.view"
    }'
    

    创建成功后会返回群组UUID,需要记录下来。

    (4)创建用户

    这里说的用户就是登陆客户端应用的具体用户了,这里创建用户larry,密码为larry,命令如下:

    curl 'http://localhost:8080/uaa/Users' -i -X POST 
        -H 'Accept: application/json' 
        -H 'Authorization: Bearer eyJhbGciOiJSxxx' 
        -H 'Content-Type: application/json' 
        -d '{
      "externalId" : "test-user",
      "meta" : {
        "version" : 0,
        "created" : "2020-12-18T15:55:56.465Z"
      },
      "userName" : "larry",
      "name" : {
        "formatted" : "Larry Deng",
        "familyName" : "Deng",
        "givenName" : "Larry"
      },
      "emails" : [ {
        "value" : "larry@pkslow.com",
        "primary" : true
      } ],
      "phoneNumbers" : [ {
        "value" : "666666"
      } ],
      "active" : true,
      "verified" : true,
      "origin" : "",
      "password" : "larry",
      "schemas" : [ "urn:scim:schemas:core:1.0" ]
    }'
    

    创建成功后会返回用户UUID,需要记录下来。

    (5)把用户加到群组里

    当群组和用户都创建成功后,就把用户添加到群组中去,这里是通过UUID来关联的,命令如下:

    curl 'http://localhost:8080/uaa/Groups/d633a216-029b-4f44-a7e0-15c5fd326ef2/members' -i -X POST 
        -H 'Content-Type: application/json' 
        -H 'Authorization: Bearer eyJhbGciOiJSUzIxxx' 
        -d '{"origin":"uaa","type":"USER","value":"a45a62a1-47ad-4345-bcef-ba12d7fd97e4"}'
    
    

    URL的是群组UUID,消息体的是用户的UUID。

    4 登陆认证

    配置完成后,可以查看数据库来认证。当然最直观的还是直接登陆Data Flow来试试:

    可以看到,用户larry成功登陆,并且只有只读权限,没有添加、修改等操作功能了。这是因为我们只添加了一个群组dataflow.view,认证通过!

    5 总结

    知道了基本操作后,其它操作也就容易了。更多API接口请查看官网地址:https://docs.cloudfoundry.org/api/uaa/version/74.30.0/index.html

    代码请查看:https://github.com/LarryDpk/pkslow-samples


    欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

    多读书,多分享;多写作,多整理。

  • 相关阅读:
    android闹钟小案例之知识点总结
    转载---程序员发展之路
    android闹钟小案例之功能阐述
    基础篇:2.熟练掌握相关监听器的注册和使用
    基础篇:1.掌握基本组件和容器组件的使用
    微博分享、注销功能的实现
    新浪微博授权认证的实现
    新浪微博分享功能的简单实现
    读《编程高手箴言》笔记一
    Spark内核架构核心组件.txt
  • 原文地址:https://www.cnblogs.com/larrydpk/p/14921328.html
Copyright © 2011-2022 走看看