“我喜欢编写身份验证和授权代码。” 〜从来没有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的RestTemplateschool-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微服务相关推荐

  1. 使用Spring Security和OAuth 2.0保护Spring微服务架构

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 每个开发 ...

  2. Notadd 4.0.0-alpha.1 基于 nest.js 的微服务架构

    新功能 AOP 面向切面编程 支持 Typescript Graphql API 支持 Grpc 的微服务架构 用户组织权限 服务(需要额外下载) Nest 采纳了 Angular 最核心的设计思想和 ...

  3. golang 比较完美的通用框架,kratos v2.0 学习,一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。涵盖了互联网开发的常用功能模块的开发库。

    目录 前言 1,关于kratos v2.0 2,Principles 原则 2,Features 特色 3,Architecture 架构 4,总结 前言 本文的原文连接是: https://blog ...

  4. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  5. 构建Spring微服务并对其进行Dockerize生产

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 在这篇文 ...

  6. 微服务架构实战第八节 微服务安全框架,认证与授权

    25 服务安全:如何理解微服务访问的安全需求和实现方案? 今天,我们又将进入一个全新的话题,讨论微服务架构中的服务访问安全性相关的需求和实现方案.在设计微服务架构时,安全性是一个重要但又往往被忽略的主 ...

  7. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

  8. 【过程记录】springcloud配置使用Eureka作服务发现组件并进行微服务注册

    Eureka介绍 工具准备 步骤 编写eureka server 编写微服务应用: 查询指定微服务在Eureka上的实例列表 Eureka的自我保护模式 Eureka介绍 Eureka是Netflix ...

  9. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

最新文章

  1. java debugtrace_Debug与Trace的区别
  2. boost asio 应用方法学(二)——深入框架
  3. 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
  4. CentOS快捷键总结
  5. java thrift client_使用thrift的java client调用python server
  6. 云计算相关资料/博客/网上收集的关于OpenStack的一些资源
  7. poj2109 Power of Cryptography
  8. 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
  9. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
  10. 小程序弹框出现,底部页面也跟随滚动
  11. 如何自制会跳舞的AI小姐姐?这有一份易上手的开源攻略
  12. ECMAScript 学习笔记03
  13. WINDOWS蓝屏照片
  14. 判断用户端有无安装flash插件并返回对应播放器选项提示
  15. C#基础 控制台应用程序(一)介绍
  16. 图像基本处理(灰度化)
  17. 奇偶校验方法(韦根协议)
  18. 品优购06——运营商后台(商品管理)
  19. 莫生气,一切对镜皆是考验,对面若不识,还需从头练
  20. android手机怎么删除安装包,手机里的自带软件如何卸载

热门文章

  1. bzoj 2908. 又是nand(树链剖分+区间NAND+单点修改)
  2. 【线段树】Frog Traveler(CF751D)
  3. 图像处理作业 第8次
  4. Hadoop入门(二十一)Mapreduce的求和程序
  5. Java动态代理之cglib
  6. 面象对象设计6大原则之一:单一职责原则
  7. CSS3的几个变形案例……
  8. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
  9. 在mysql中插入日期
  10. SecureCRT连接Linux的操作步骤