通过Okta的单点登录保护Spring Boot Web App的安全

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

您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和授权管理的企业级REST服务器。 Spring Boot及其Starter软件包提供了可用于生产的Tomcat服务器,Okta使用OAuth保护您的API。

本教程将引导您完成整个过程。 Okta在线后,只需几行代码和配置就可以轻松添加功能齐全的客户端身份验证和用户管理! 同样在本教程中,我将向您展示安全的Spring Boot服务器如何能够将Web内容或用作后端API,但仅向已向您注册的用户提供。 准备? 我们走吧!

Spring Boot和Okta入门

从零到安全的Web服务器不会一flash而就。 要完成此项目,您将:

  • 使用Spring Initializr下载全新的Spring Boot入门项目
  • 创建一个新的Okta帐户并访问您的管理仪表板
  • 添加几行代码并进行配置
  • 请参阅在新服务器上运行的单点登录!

为什么是春天?

Spring是一套成熟,使用广泛且文档齐全的工具和库,旨在使您成为Java开发人员更加轻松。 它提供了大量功能,从简单的数据库连接和服务器创建(如我们在本教程中将看到的)到交钥匙安全性,消息传递,移动开发等。

Spring Boot是Spring的一个子项目,致力于使超快速和轻松地引导新的Spring应用程序成为可能。 它的主要吸引力之一是它不需要乱糟糟的配置文件(关于早期Spring生态系统的常见抱怨)。 正如我们将很快看到的,使用一些简单的注释和Maven依赖关系将使我们在几分钟之内从零迁移到安全的Web服务器。

下载并初始化新的Spring Boot项目

Spring提供了一个名为Spring Initializr的工具,使您可以单击创建并下载一个包含新Spring Boot项目的zip文件。 转至该处并创建一个包含WebSecurity入门程序的新项目。 我保留了默认的工件和组,并在我的主目录中demo.zip压缩了demo.zip文件。 解压缩了以下文件:

那些熟悉Maven的人会认识到pom.xml文件。 仅有四个小依赖项从Spring中引入了大量功能:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope>
</dependency>

在获得有趣的东西之前,请通过以下方式运行服务器,以确保一切正常

./mvnw spring-boot:run

在所有丰富多彩的日志语句中,要查找的语句可能倒数第二:

Tomcat started on port(s): 8080 (http)


因为在创建项目时请求了Spring Security Starter软件包,所以默认情况下,使用Basic Authentication来保护服务器。 可以通过打开浏览器并访问以下命令来验证这一点:

http://localhost:8080

将出现一个浏览器对话框,询问您的用户名和密码(尚未设置):

不用费心在新服务器中设置硬编码的用户名和密码,突然访问完整的OAuth会话管理,用户管理,站点统计信息等等是否更好? 我们可以在Okta的短短几分钟内做到这一点!

使用Okta将OAuth身份验证添加到您的服务器

现在是时候通过用户管理,密钥和凭据存储和轮换,OAuth服务器维护,忘记的密码处理以及精巧的管理UI来增强服务器。 这听起来很麻烦! 幸运的是,使用Okta的用户管理和授权服务已为您完成了此工作。 您只需将Okta依赖项插入到Spring Boot项目中,配置一些安全性设置,然后只需几个简单的步骤即可获得所有这些安全性和一揽子筹码。 就是这样。

获取您的Okta凭证

如果您是Okta的新手,可以在这里注册一个免费的开发者帐户。 您会收到一封邀请电子邮件,其中包含您的用户名(您的电子邮件地址)和一个临时密码。 按照电子邮件中提供的链接,使用这些凭据登录,并首次创建您的管理员帐户。 将要求您创建一个新密码,并在完成此页面后,您将找到Okta开发人员控制台。 这里有很多值得探索的地方,因此,如果您愿意,可以休息一下并四处浏览!

准备好继续时,请转到Okta仪表板中的“ 应用程序”选项卡。 它看起来应该像这样:

单击绿色的“ 添加应用程序”按钮,由于要构建Web服务器,因此选择Web (.NET,Java等)作为应用程序类型,然后单击“ 下一步”

在随后的设置页面中,有一个默认值可以更改。 在“ 登录重定向URI”字段中,将默认值替换为:

http://localhost:8080/login

然后,点击完成 。 这会将您带入新应用程序的基础。 这里也有很多功能,但是现在您需要在仪表板“ 应用程序”主选项卡的“ 常规”子选项卡中记下一些信息。 前两个是位于页面底部附近的客户端ID客户端密钥

请妥善保管并确保安全! 您将在Spring Boot服务器中使用它们来通过Okta进行身份验证。

接下来,转到仪表板顶部的“ API”选项卡,然后在此屏幕中,注意Issuer URI 。 如果看不到,请确保您位于“ 授权服务器”子选项卡上。 这是您的服务器将与之通信的Okta OAuth授权服务器。

现在,您的Client IDClient SecretIssuer URI被安全地保存了; 是时候将Okta插入服务器了。 在pom.xml文件中添加Okta和Spring OAuth依赖项以及其他依赖项:

<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>0.2.0</version>
</dependency>
<dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId><version>2.2.0.RELEASE</version>
</dependency>

接下来,将三个值添加到: src/main/resources/application.properties

okta.oauth2.issuer=(your **Issuer URI**)
okta.oauth2.clientId=(your **Client ID**)
okta.oauth2.clientSecret=(your **Client Secret**)

像这样:

okta.oauth2.issuer=https://dev-279161.oktapreview.com/oauth2/default
okta.oauth2.clientId=0oacqif7do3e0hD0h7
okta.oauth2.clientSecret=(your **Client Secret**)

在收获Okta所能提供的一切之前的最后一步-在服务器上使用它! 对于本文,目标是添加单点登录身份验证,以便只有向您注册的用户才能登录到您的服务器并与其进行交互。 主应用程序类需要告诉Okta客户端库启用单点登录,这是通过在主应用程序类中添加以下注释来实现的: src/main/java/com/example/demo/DemoApplication.java

@EnableOAuth2Sso

在进行此操作时,不妨添加一个终结点,该终结点将对我们将要获得的新用户信息起作用。 您可以通过以下方式装饰主Application类:

@RestController

Okta通过java.security.Principal接口提供调用者的用户ID。 默认情况下,这是用户的电子邮件地址。 您可以添加一个与用户的电子邮件地址相呼应的请求处理程序,如下所示:

@GetMapping("/")
public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName();
}

使用新的导入,注释和请求处理程序,主DemoApplication.java应如下所示:

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.Principal;@RestController
@EnableOAuth2Sso
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@GetMapping("/")public String echoTheUsersEmailAddress(Principal principal) {return "Hey there! Your email address is: " + principal.getName();}
}

当您通过./mvnw spring-boot:run重新启动服务器并在浏览器中访问http://localhost:8080时,您将被带到个人的Okta子域进行登录:

您可以使用创建Okta帐户时设置的电子邮件和密码登录,因为默认情况下您是作为“我的Web应用程序” Okta应用程序中的用户添加的。 除非您在管理控制台中重新创建了新用户,否则这是唯一被授予访问您网站权限的用户。

登录后,您将以经过身份验证的用户身份重定向回您的站点,并且应该会看到您的电子邮件地址已回显给您!

下一步是什么?

现在,当您为应用创建或注册新用户时,真正的乐趣就开始了! 花一些时间尝试不同的权限级别。 查看审核日志以查看您的用户的活动。 将用户添加到组,并自定义和控制电子邮件和短信通信。

有兴趣了解更多吗? 查看以下其他Java资源:

  • 我们的Java产品文档
  • 使用Spring Boot和OAuth保护您的SPA
  • 使用Spring Security和Thymeleaf向您的应用程序添加基于角色的访问控制

如果您对此内容或我们的任何其他内容有疑问(或只是想聊天!),请在Twitter @OktaDev上与我们联系 。 我们很乐意听取您的意见!

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

在15分钟内将Single Sign-on添加到您的Spring Boot Web App中最初于2017年11月20日发布在Okta开发人员博客上。

翻译自: https://www.javacodegeeks.com/2018/01/secure-spring-boot-web-app-single-sign-okta.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

java ee cdi在本教程中&#xff0c;我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义。 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除。 在这里&#xff0c;我们将向您展示如何以动态方式避免依赖消除歧义。 我们将通过检查…

在EL表达式中引用ADF Faces组件

EL表达式通常用于在页面上指定ADF Faces组件的属性值。 有趣的是&#xff0c;我们可以使用component关键字来引用要为其评估EL表达式的组件实例。 这是略与此类似Java中。 例如&#xff0c;在以下代码段中&#xff0c;按钮的提示被评估为按钮的文本值&#xff0c;并且它的visi…

atom自动补全html代码,Atom - Emmet插件的使用详解(HTML/CSS代码自动补全)

一、Emmet的安装与介绍Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的工具&#xff0c;能够实现 HTML、CSS 的快速编写。官网地址&#xff1a;http://emmet.io/官方文档&#xff1a;http://docs.emmet.io/cheat-sheet/Atom的emmet介绍页面&#xff1a;https://at…

html怎么做出相框的效果,PS滤镜制作漂亮的实木相框效果

一、新建一个600 * 800像素的文件&#xff0c;然后新建一个图层&#xff0c;前景颜色设置为红色&#xff0c;背景设置为深红色&#xff0c;执行&#xff1a;滤镜 > 渲染 > 纤维&#xff0c;参数设置如下图。二、执行&#xff1a;图像 > 旋转画布 > 逆时针90度&…

crawler4j_迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识

crawler4j继续执行正在实现搜索引擎的Programming Collection Intelligence &#xff08;PCI&#xff09;的第4章。 我可能比做一次运动所咬的东西要多。 我认为&#xff0c;与其使用本书中所使用的常规关系数据库结构&#xff0c;不如说我一直想看看Neo4J&#xff0c;所以现在…

html图片显示原始大小,我如何使PHP / HTML图像在单击时显示原始大小?

如果您要使用纯JavaScript&#xff0c;则可以设置onclick事件侦听器并获取图像的实际大小(确定图像在浏览器中的原始大小吗&#xff1f;)&#xff0c;然后将此大小设置为image。(如果您希望第二次单击将其设置为旧尺寸&#xff0c;请将旧尺寸保存到全局变量中&#xff0c;然后进…

OWASP依赖性检查Maven插件–必须具备

我不得不非常遗憾地承认&#xff0c;我对OWASP依赖检查maven插件一无所知。 自2013年以来似乎已经存在。显然GitHub上已有千个项目正在使用它。 过去&#xff0c;我手动检查了依赖项&#xff0c;以根据漏洞数据库对其进行检查&#xff0c;或者在很多情况下&#xff0c;我只是完…

html数据填充,JS使用模板快速填充HTML控件数据

图片 图片名称 类型 大小 尺寸 上传日期 操作

html selsec 文字靠右,EDA课程设计

计辅助工具&#xff0c;集成了SOPC和HardCopy设计流程&#xff0c;并且继承了Maxplus II 友好的图形界面及简便的使用方法。Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口&#xff0c;越来越受到数字系统设计者的欢迎。设计原理多功能…

Spring Data Solr教程:将自定义方法添加到单个存储库

我的Spring Data Solr教程的前一部分教我们如何使用查询方法创建静态查询。 自然而然的下一步将是描述如何使用Spring Data Solr创建动态查询。 但是&#xff0c;在继续讨论该主题之前&#xff0c;我们必须了解如何将自定义方法添加到单个存储库。 这篇博客文章将帮助我们了解如…

html用c 绑定sql,HTML、SQL、C++及C综合测试六(含答案).pdf

1、在HTML 文档中,标签的( )属性可以创建跨多个行的单元格 (选择一项)A、COLSPAN B、ROW C、ROWSPAN D、SPAN2、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项)A、sa B、master C、administrator D、super3、某C#中的main()方法如下所示,则编译运行…

基于Spring的应用程序-迁移到Junit 5

这是有关将基于Gradle的Spring Boot应用程序从Junit 4迁移到闪亮的新Junit 5的快速文章。Junit 4测试继续与Junit 5 Test Engine抽象一起工作&#xff0c;该抽象为在不同编程模型中编写的测试提供支持。例如&#xff0c;Junit 5支持能够运行JUnit 4测试的Vintage Test Engine。…

查询阜阳2021高考成绩,2021年阜阳高考成绩排名及成绩公布时间什么时候出来

阜阳高考结束后&#xff0c;每年都有很多家长和考试不知道阜阳高考成绩排名如何查询、阜阳高考成绩什么时候公布以及查询方式&#xff0c;本文小编整理了阜阳高考成绩查询排名的相关知识。一、阜阳高考成绩公布时间及查询方式根据往年阜阳高考成绩公布时间预测&#xff0c;2021…

martin fowler_用Java和Java 8创建内部DSL,采用Martin Fowler的方法

martin fowler目前&#xff0c;我正在阅读Martin Fowler撰写的有关DSL- 特定领域语言的精彩书籍。 围绕DSL的嗡嗡声&#xff0c;围绕轻松支持DSL创建的语言&#xff0c;以及DSL的使用&#xff0c;使我好奇地了解和学习DSL的这一概念。 到目前为止&#xff0c;这本书的使用经验令…

2021高考厦门一中成绩查询,2021年厦门中考成绩和分数线什么时候公布(附查询入口)...

每年中考结束后很多考生和家长都很关心成绩什么时候公布&#xff0c;中考分数线什么时候公布&#xff1f;然而你离彻底解放就只差一步——查分数&#xff01;查分数&#xff0c;比上考场考试还要紧张啊&#xff01;考分不知道&#xff0c;玩耍似心跳。那么2019年厦门中考成绩什…

Java开发人员应该知道的前20个库和API

优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解&#xff0c;包括JDK和第三方库。 我花了很多时间来学习API&#xff0c;尤其是在阅读了Effective Java 3rd Edition之后 &#xff0c;Joshua Bloch建议在Java 3rd Edition中使用现有的API进行开发&#xff0c;而不是为…

计算机桌面文字重影,电脑桌面字有重影怎么办

1.电脑字体重影怎么办可以尝试以下4种方法&#xff1a;1. 右击“我的电脑”&#xff0c;依次单击“属性/高级/性能设置”在“视觉效果”页中将“在桌面上为图标标签使用阴影”选中&#xff0c;单击确定即可。2. 右键桌面空白处右击&#xff0c;在“排列图标”里去掉“锁定桌面的…

打磨锤子计算机专业,钳工磨锤子实训心得体会

钳工磨锤子实训心得体会实训是职业技能实际训练的简称,是指在学校控制状态下,按照人才培养规律与目标,对学生进行职业技术应用能力训练的教学过程。钳工磨锤子实训心得体会&#xff0c;我们来看看。钳工磨锤子实训心得体会1前言&#xff1a;通过这次的钳工实习报告&#xff0c;…

吸气剂和二传手被认为有害

Java程序员习惯性地用“ getters”和“ setters”来修饰类&#xff0c;这种做法根深蒂固&#xff0c;以至于几乎没有人质疑为什么这样做或是否应该这样做。 最近&#xff0c;我认为最好不要这样做&#xff0c;并且我开始在编写的Java代码中避免使用它。 在这篇博客文章中&#…

html编辑器设置为publisher,将PDF转换为Publisher的简单方法

二、 如何把PDF文件转换为Publisher支持的图片格式一些专业的软件或者在线网站都可以帮助我们把PDF文件转换为Publisher支持的图片格式。下面将提供几种支持PDF文件转换为图片格式的方法。(1) 使用都叫兽™PDF转换器进行格式转换热点推荐 - ADs都叫兽™PDF转换器 - 多功能的PDF…