pkslow.com 南瓜慢说

  • AllArticles
  • Container
  • Spring
  • Life
  • Cloud
  • Collections
  • About
  • GitHub

  • Search
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java

Spring Cloud Data Flow整合UAA使用外置数据库和API接口

Created on: 2020-12-27 | Category: Springboot | 0 | View: 1075

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后面是admin的Token,太长这里不贴出来了。

(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


Code for all: GitHub

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

file

Recommendations:
Cloud Native
Terraform
Container: Docker/Kubernetes
Spring Boot / Spring Cloud
Https
如何制定切实可行的计划并好好执行

  • Author 作者: LarryDpk 南瓜慢说
  • Link 链接: https://www.pkslow.com/archives/spring-cloud-dataflow-uaa-api
  • 版权声明: 本博客所有文章除特别声明外,不可转载!
# Terraform101 # English # Terraform # Middleware # config # Go # Private # Kubernetes # pkslow # Test # HTTPS # Redis # Docker # Mac # Plan # Stream # MongoDB # Spring # DevOps # JVM # String # Map # Set # List # Performance # Email # Springboot # JavaCollections # ArrayList # Java
Terraform101 English Terraform Middleware config Go Private Kubernetes pkslow Test HTTPS Redis Docker Mac Plan Stream MongoDB Spring DevOps JVM String Map Set List Performance Email Springboot JavaCollections ArrayList Java
这么高颜值的Kubernetes管理工具Lens,难道还不能C位出道吗
Terraform模块Module管理,聚合资源的抽取与复用
  • Contents
  • Site Overview
南瓜慢说

南瓜慢说

多年Java开发,主要专注后端技术:Java/Spring/Springboot/微服务/大数据等。

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

241 Posts
9 Categories
30 Tags
RSS
0%
© 2020 — 2022 南瓜慢说 pkslow The WebSite keeping alive:   粤ICP备20036375号