Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶!
1 前言
关于Spring Cloud Data Flow
这里不多介绍,有兴趣可以看下面的文章。本文主要介绍如何整合Data Flow
和CloudFoundry UAA
来做权限控制,而不是任何人都可以直接访问操作。
Spring Cloud Data Flow
相关文章:
Spring Cloud Data Flow初体验,以Local模式运行
把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试
Spring Cloud Data Flow用Shell来操作,方便建立CICD
被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题
UAA,即CloudFoundry User Account and Authentication
,一个身份认证和授权服务系统,主要用于CloudFoundry
,也可以作为一个独立的OAuth2
服务器,给客户端分发令牌。可以在单点登陆SSO
等场景使用到它。
UAA
还可以整合LDAP
,但为了简化,本文只演示如何最简单的整合。
2 启动UAA服务
官方提供了war
包形式的uaa.war
,可以直接下载然后部署在Servlet
容器上,如Tomcat
等。UAA Bundled
通过Springboot
把war
包包装起来,让启动应用像应用springboot
一样简单。本文通过这种形式来启动。
通过插件maven-dependency-plugin
来下载war
包,如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<!--本地IDE启动时需要-->
<artifactItem>
<groupId>org.cloudfoundry.identity</groupId>
<artifactId>cloudfoundry-identity-uaa</artifactId>
<version>4.30.0</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
<destFileName>uaa.war</destFileName>
</artifactItem>
<!--打包成jar需要-->
<artifactItem>
<groupId>org.cloudfoundry.identity</groupId>
<artifactId>cloudfoundry-identity-uaa</artifactId>
<version>4.30.0</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.basedir}/target/classes</outputDirectory>
<destFileName>uaa.war</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</plugin>
通过一个Springboot
的主函数入口来调用:
@SpringBootApplication
public class UaaServer {
public static void main(String[] args) {
SpringApplication.run(UaaServer.class, args);
}
@Bean
public ServletWebServerFactory servletContainer() throws IOException {
final File tempDirectory = Files.createTempDirectory("uaa").toFile();
final File tempUaaYmlFile = new File(tempDirectory, "uaa.yml");
final File tempUaaWarFile = new File(tempDirectory, "uaa.war");
FileCopyUtils.copy(
new ClassPathResource("uaa.yml").getInputStream(),
new FileOutputStream(tempUaaYmlFile));
FileCopyUtils.copy(
new ClassPathResource("uaa.war").getInputStream(),
new FileOutputStream(tempUaaWarFile));
System.out.println("uaa.yml: " + tempUaaYmlFile.getAbsolutePath());
System.out.println("uaa.war: " + tempUaaWarFile.getAbsolutePath());
System.setProperty("UAA_CONFIG_FILE", tempUaaYmlFile.getAbsolutePath());
return new TomcatServletWebServerFactory() {
protected TomcatWebServer getTomcatWebServer(org.apache.catalina.startup.Tomcat tomcat) {
final Server tomcatServer = tomcat.getServer();
final File catalinaBase = new File(tempDirectory, "catalina");
catalinaBase.mkdirs();
tomcatServer.setCatalinaBase(catalinaBase);
new File(tomcatServer.getCatalinaBase(), "webapps").mkdirs();
try {
Context context = tomcat.addWebapp("/uaa", tempUaaWarFile.toString());
final ClassLoader properClassLoader = UaaServer.class.getClassLoader();
WebappLoader loader =
new WebappLoader(properClassLoader);
context.setLoader(loader);
} catch (Exception ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatWebServer(tomcat);
}
};
}
}
配置文件和war
包的文件名硬编码了,实际项目可以通过配置来实现。
接着要配置uaa.yml
文件,具体内容查看代码https://github.com/LarryDpk/pkslow-samples ,这里不贴出来了。注意需要生成JWT
的key:
$ openssl genrsa -out signingkey.pem 2048
Generating RSA private key, 2048 bit long modulus
........................+++
..........................................................................+++
e is 65537 (0x10001)
$ openssl rsa -in signingkey.pem -pubout -out verificationkey.pem
writing RSA key
完成以上步骤后,可以打包启动了,命令如下:
mvn clean package
java -jar target/cloudfoundry-uaa-server-1.0-SNAPSHOT.jar
默认端口为8080
。成功启动后,可以访问:http://localhost:8080/uaa/login
3 配置账号
为了方便,我们使用内存数据库来保存账户信息,重启后就会丢失。通过uaa
提供的命令行工具uaac
来创建用户与权限。因为uaac
是基于Ruby
的,所以还要先安装Ruby
,我的电脑已经自带,这里就不演示了。
为了更快安装命令行工具cf-uaac
,修改Ruby
包管理工具gem
的源:
$ gem sources --add https://gems.ruby-china.com
https://gems.ruby-china.com added to sources
$ gem sources -l
*** CURRENT SOURCES ***
https://rubygems.org/
https://gems.ruby-china.com
$ gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
配置了国内源后,安装:
$ sudo gem install cf-uaac
15 gems installed
安装完成后,就可以通过下面的命令来创建用户了。
uaac target http://localhost:8080/uaa
uaac token client get admin -s adminsecret
uaac client add dataflow \
--name dataflow \
--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 \
--authorized_grant_types password,authorization_code,client_credentials,refresh_token \
--authorities uaa.resource,dataflow.create,dataflow.deploy,dataflow.destroy,dataflow.manage,dataflow.modify,dataflow.schedule,dataflow.view,sample.view,sample.create \
--redirect_uri http://localhost:9393/login \
--autoapprove openid
uaac group add "sample.view"
uaac group add "sample.create"
uaac group add "dataflow.view"
uaac group add "dataflow.create"
uaac group add "dataflow.deploy"
uaac group add "dataflow.destroy"
uaac group add "dataflow.manage"
uaac group add "dataflow.modify"
uaac group add "dataflow.schedule"
uaac user add larry -p larry --emails larry@pkslow.com
uaac member add "dataflow.view" larry
uaac member add "dataflow.create" larry
uaac member add "dataflow.deploy" larry
uaac member add "dataflow.destroy" larry
uaac member add "dataflow.manage" larry
uaac member add "dataflow.modify" larry
uaac member add "dataflow.schedule" larry
uaac user add vieweronly -p mysecret --emails vieweronly@pkslow.com
uaac member add "dataflow.view" vieweronly
这里关键的是用户和群组,即user
和group
。这里配置的信息,会与Data Flow Server
的配置对应上才可以。
4 配置与启动Data Flow Server
Data Flow Server
的配置文件非常重要,它是整合UAA
的关键。关键是两部分,第一部分是配置UAA
各种信息,如clientId
,Token
的地址,各种鉴权地址等;第二部分是角色映射,Data Flow
是基于角色的权限控制,它自己的角色要和UAA
的群组映射起来才可以正常使用。
配置如下:
spring:
security:
oauth2:
client:
registration:
uaa:
client-id: dataflow
client-secret: dataflow
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
authorization-grant-type: authorization_code
scope:
- openid
- dataflow.create
- dataflow.deploy
- dataflow.destroy
- dataflow.manage
- dataflow.modify
- dataflow.schedule
- dataflow.view
provider:
uaa:
jwk-set-uri: http://localhost:8080/uaa/token_keys
token-uri: http://localhost:8080/uaa/oauth/token
user-info-uri: http://localhost:8080/uaa/userinfo
user-name-attribute: user_name
authorization-uri: http://localhost:8080/uaa/oauth/authorize
resourceserver:
opaquetoken:
introspection-uri: http://localhost:8080/uaa/introspect
client-id: dataflow
client-secret: dataflow
cloud:
dataflow:
security:
authorization:
provider-role-mappings:
uaa:
map-oauth-scopes: true
role-mappings:
ROLE_VIEW: dataflow.view
ROLE_CREATE: dataflow.create
ROLE_MANAGE: dataflow.manage
ROLE_DEPLOY: dataflow.create
ROLE_DESTROY: dataflow.create
ROLE_MODIFY: dataflow.create
ROLE_SCHEDULE: dataflow.create
可以看出,多个不同角色可以映射同一个群组,非常灵活。
配置完成后,就可以启动Data Flow Server
了:
java -jar data-flow-server.jar --spring.config.additional-location=./src/main/resources/application.yaml
5 体验成果的时候到了
成功启动UAA
并配置用户,再启动Data Flow Server
后,便可以开始使用了,过程如下:
访问http://localhost:9393/dashboard/#/apps 会自动跳转到登陆界面,点击uaa
:
跳转到uaa
的登陆界面:
输入配置的账号密码:larry/larry
,上面显示为Email
,其实并不是。登陆后就要确认授权:
授权后,会自动跳转回Data Flow
的界面,并已经有权限进行查看操作了:
登出后,又要要求重新登陆。至此,我们已经成功地整合了。
而shell
的使用如下:
$ java -jar spring-cloud-dataflow-shell-2.7.0.jar \
--dataflow.uri=http://localhost:9393 \
--dataflow.username=my_username \
--dataflow.password=my_password \
--skip-ssl-validation true
总结
本文通过一步步演示如何整合Data Flow Server
和UAA
,以实现Data Flow
安全要求。实际UAA
应该使用其它数据库,如MySQL
,或整合LDAP
,这样重启账号数据不会丢失。后续有空再讨论吧。
代码请查看:https://github.com/LarryDpk/pkslow-samples
参考文档:
A Quick Guide To Using Cloud Foundry UAA
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...
多读书,多分享;多写作,多整理。
Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制的更多相关文章
- Spring Cloud Data Flow整合UAA使用外置数据库和API接口
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制 ...
- Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库中: ...
- Spring Cloud Data Flow初体验,以Local模式运行
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用.不仅 ...
- Spring Cloud Data Flow 中的 ETL
Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...
- 把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubern ...
- 【SFA官方译文】:Spring Cloud Data Flow中的ETL
原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...
- Spring Cloud Data Flow用Shell来操作,方便建立CICD
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...
- Spring Cloud学习笔记【七】服务网关 Zuul(路由)
Spring Cloud Zuul 路由是微服务架构的不可或缺的一部分,提供动态路由.监控.弹性.安全等的边缘服务.Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器. 准 ...
- Spring Cloud架构教程 (三)服务网关(基础)
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...
随机推荐
- [源码解析] 并行分布式框架 Celery 之 容错机制
[源码解析] 并行分布式框架 Celery 之 容错机制 目录 [源码解析] 并行分布式框架 Celery 之 容错机制 0x00 摘要 0x01 概述 1.1 错误种类 1.2 失败维度 1.3 应 ...
- [刷题] 20 Valid Parentheses
要求 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 空字符串可被认为是有效字符串 思路 遇 ...
- fedora21 桌面用户自动登录lightdm.conf -20190520 方法
修改 /etc/lightdm/lightdm.conf 步骤:1解除注释#autologin-user=root 2等号 =后面是root或者普通用户的用户名 例如:root用户自动登录 autol ...
- xrandr 直接输这个能显示可用的分辨和当前的分辨率 xrandr -s 1920x1200就设置成指定的分辨率
利用 xrandr 命令修改屏幕分辨率 时间 2016-10-29 原文 http://blog.csdn.net/mao0514/article/details/52965700 问题背景 ...
- && echo suss! || echo failed
### && echo suss! || echo failed 加在bash后 ########ls /proc && echo suss! || echo fail ...
- IPMI中sol的使用
IPMI中sol的使用 转载韦远科 最后发布于2013-05-09 15:19:18 阅读数 7920 收藏 http://blog.chinaunix.net/uid-1838361-id-3 ...
- 攻防世界(十)NewsCenter
攻防世界系列 :NewsCenter 方法一 1.打开题,看到搜索框首先想到的是sql注入 2.检查注入点 -1' union select 1,2,3# 存在注入漏洞 3.查库 附:Sql注入常见语 ...
- linux中级之HAProxy基础配置
一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...
- STM32SD卡 (U盘)IAP升级
http://www.openedv.com/posts/list/65104.htm
- CentOS7安装开发工具套件时报错解决方案
操作系统:CentOS 7.2 执行安装命令时显示以下信息: [root@DEV-CMDB-DB02 ~]# yum -y groupinstall "Development Tools&q ...