使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务
“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。
如果您使用Spring Boot,Spring Cloud和Spring Cloud Config,则只需最少的代码即可构建微服务架构。 将所有内容打包到Docker容器中,即可使用Docker Compose运行所有内容。 如果您在服务之间进行通信,则可以通过不在docker-compose.yml
文件中公开其端口来确保服务的安全性。
但是,如果有人不小心暴露了微服务应用程序的端口会怎样? 他们仍然安全还是任何人都可以访问他们的数据?
在本文中,我将向您展示如何使用HTTPS和OAuth 2.0保护服务到服务的通信。
使用Spring Boot,Spring Cloud和Spring Cloud Config开发微服务堆栈
我将简化使用Spring Boot,Spring Cloud和Spring Cloud Config构建完整的微服务堆栈的过程。 我的好友拉斐尔(Raphael)写了一篇文章,介绍如何构建Spring微服务并将其Docker化用于生产 。 您可以使用他的示例应用程序作为起点。 克隆okta-spring-microservices-docker-example项目:
git clone https://github.com/oktadeveloper/okta-spring-microservices-docker-example.git spring-microservices-security
cd spring-microservices-security
此项目在Okta上需要两个OpenID Connect应用程序,一个用于开发,一个用于生产。 如果没有完成上述教程,则需要在Okta上创建每个应用程序。
在Okta上创建OpenID Connect应用程序
您可以注册一个免费的开发人员帐户 ,该帐户最多可以有0个月活跃用户,费用为$ 0。 对于这个例子来说应该足够了。
为什么选择Okta? 因为编写身份验证很无聊。 Okta具有身份验证和用户管理API,可让您更快地开发应用。 我们的API和SDK使您可以在几分钟内轻松地进行身份验证,管理和保护用户安全。
创建帐户后,在Okta的信息中心(“ 应用程序” >“ 添加应用程序” )中创建一个新的Web应用程序 。 给应用程序起一个您将记住的名称,复制现有的登录重定向URI,并使其使用HTTPS。 单击完成 。
结果应类似于下面的屏幕截图。
创建另一个用于生产的应用程序。 我给我的Prod Microservices
。
在您克隆的项目中,修改config/school-ui.properties
以使用开发应用程序中的设置。
okta.oauth2.issuer=https://{yourOktaDomain}/oauth2/default
okta.oauth2.clientId={devClientId}
okta.oauth2.clientSecret={devClientId}
当使用Maven单独运行应用程序时,将使用这些设置。 在Docker Compose上运行时使用生产设置。 修改config-data/school-ui-production.properties
以使用生产应用程序中的设置。
okta.oauth2.clientId={prodClientId}
okta.oauth2.clientSecret={prodClientId}
您可以在spring.profiles.active
docker-compose.yml
看到spring.profiles.active
打开生产配置文件:
school-ui:image: developer.okta.com/microservice-docker-school-ui:0.0.1-SNAPSHOTenvironment:- JAVA_OPTS=-DEUREKA_SERVER=http://discovery:8761/eureka-Dspring.profiles.active=productionrestart: on-failuredepends_on:- discovery- configports:- 8080:8080
Docker Compose从应用程序上方的目录中运行,并从config-data
目录读取其数据。 因此,您需要将这些属性文件复制到此目录中。 从该项目的根目录运行以下命令。
cp config/*.properties config-data/.
使用Docker Compose启动Spring微服务堆栈
该项目在其根目录中有一个聚合器pom.xml
,使您可以使用一个命令来构建所有项目。 运行以下Maven命令为每个项目构建,测试和构建Docker映像。
mvn clean install
如果您尚未安装Maven,则可以使用SDKMAN进行安装!
sdk install maven
该过程完成后,使用Docker Compose启动所有应用程序{config,discovery,school-service和school-ui}。 如果尚未安装,请参阅安装Docker Compose 。
docker-compose up -d
您可以使用Kitematic查看每个应用程序启动时的日志。
在您喜欢的浏览器中导航到http://localhost:8080
。 完成后,您应该可以登录并查看学校课程列表。
Spring Security和OAuth 2.0
此示例使用Okta的Spring Boot Starter ,它是Spring Security之上的薄层。 Okta入门程序简化了配置,并在访问令牌中进行了观众验证。 它还允许您指定将用于创建Spring Security授权的声明。
docker-compose.yml
文件不会将school-service
公开给外界。 它通过不指定ports
。
school-ui
项目有一个SchoolController
类,该类使用Spring的RestTemplate
与school-service
进行RestTemplate
。
@GetMapping("/classes")
@PreAuthorize("hasAuthority('SCOPE_profile')")
public ResponseEntity<List<TeachingClassDto>> listClasses() {return restTemplate.exchange("http://school-service/class", HttpMethod.GET, null,new ParameterizedTypeReference<List<TeachingClassDto>>() {});
}
您会注意到此类的端点上存在安全性,但是服务之间不存在安全性。 我将在下面的步骤中向您展示如何解决该问题。
首先,公开school-service
的端口,以模拟有人用粗俗的方式进行配置。 在docker-compose.yml
更改school-service
配置以公开其端口。
school-service:image: developer.okta.com/microservice-docker-school-service:0.0.1-SNAPSHOTenvironment:- JAVA_OPTS=-DEUREKA_SERVER=http://discovery:8761/eurekadepends_on:- discovery- configports:- 8081:8081
使用Docker Compose重新启动一切:
docker-compose down
docker-compose up -d
您会看到不需要身份验证即可查看http://localhost:8081
。 kes!
使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务相关推荐
- 使用Spring Security和OAuth 2.0保护Spring微服务架构
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 每个开发 ...
- Notadd 4.0.0-alpha.1 基于 nest.js 的微服务架构
新功能 AOP 面向切面编程 支持 Typescript Graphql API 支持 Grpc 的微服务架构 用户组织权限 服务(需要额外下载) Nest 采纳了 Angular 最核心的设计思想和 ...
- golang 比较完美的通用框架,kratos v2.0 学习,一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。涵盖了互联网开发的常用功能模块的开发库。
目录 前言 1,关于kratos v2.0 2,Principles 原则 2,Features 特色 3,Architecture 架构 4,总结 前言 本文的原文连接是: https://blog ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
- 构建Spring微服务并对其进行Dockerize生产
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 在这篇文 ...
- 微服务架构实战第八节 微服务安全框架,认证与授权
25 服务安全:如何理解微服务访问的安全需求和实现方案? 今天,我们又将进入一个全新的话题,讨论微服务架构中的服务访问安全性相关的需求和实现方案.在设计微服务架构时,安全性是一个重要但又往往被忽略的主 ...
- docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...
编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...
- 【过程记录】springcloud配置使用Eureka作服务发现组件并进行微服务注册
Eureka介绍 工具准备 步骤 编写eureka server 编写微服务应用: 查询指定微服务在Eureka上的实例列表 Eureka的自我保护模式 Eureka介绍 Eureka是Netflix ...
- 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关
微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...
最新文章
- java debugtrace_Debug与Trace的区别
- boost asio 应用方法学(二)——深入框架
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
- CentOS快捷键总结
- java thrift client_使用thrift的java client调用python server
- 云计算相关资料/博客/网上收集的关于OpenStack的一些资源
- poj2109 Power of Cryptography
- 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
- 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
- 小程序弹框出现,底部页面也跟随滚动
- 如何自制会跳舞的AI小姐姐?这有一份易上手的开源攻略
- ECMAScript 学习笔记03
- WINDOWS蓝屏照片
- 判断用户端有无安装flash插件并返回对应播放器选项提示
- C#基础 控制台应用程序(一)介绍
- 图像基本处理(灰度化)
- 奇偶校验方法(韦根协议)
- 品优购06——运营商后台(商品管理)
- 莫生气,一切对镜皆是考验,对面若不识,还需从头练
- android手机怎么删除安装包,手机里的自带软件如何卸载