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

okta-spring

“我喜欢编写身份验证和授权代码。” 〜从来没有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

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

@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

okta-spring

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

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

相关文章

Mac 键盘符号整理

图标介绍⌘Command⇧Shift⇪Caps Lock⌥Option Alt⌃Control↩Enter⌫Delete⌦Fn Delete↑上箭头↓下箭头←左箭头→右箭头⇞Fn ↑ Page Up⇟Fn ↓ Page DownHomeFn ←EndFn →⇥Tab 右制表符⇤Shift Tab 左制表符⎋Esc Escape⏏电源开关键

团队的英文翻译缩写_魔兽世界各种英文/拼音/缩写的翻译/解释

大灾变缩写为CTM团队副本名称缩写&#xff1a;VOA(国服简称为宝库&#xff0c;拼音缩写为BK....)&#xff1a;Vault of Archavon 八十年代团队副本阿尔卡冯的宝库&#xff0c;台服译作亞夏梵穹殿。位于冬拥湖(台服译作冬握湖)。分10人和25人难度。没有困难模式。NAXX: Naxxrama…

机器学习常见基本概念笔记

机器学习 监督学习和非监督学习: 有监督学习的方法就是识别事物&#xff0c;识别的结果表现在给待识别数据加上了标签。因此训练样本集必须由带标签的样本组成。比如分类和回归。 而无监督学习方法只有要分析的数据集的本身&#xff0c;预先没有什么标签。如果发现数据集呈现…

adf开发_在EL表达式中引用ADF Faces组件

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

Navicat Premium for Mac 快捷键

快捷键说明Comm R运行全部语句Shift Comm R运行当前语句Comm 1显示/隐藏左侧的导航窗格Comm 2显示/隐藏右侧的信息窗格Option Comm T隐藏工具栏Comm N创建新表Comm 添加记录Comm -删除记录Comm Y新建查询&#xff0c;这样会打开一个标签界面&#xff0c;可以在这个界…

wxpython 多线程_在wxPython中使用线程连续更新GUI的好方法?

我正在开发一个使用pythonv2.7和wxpythonv3.0的GUI应用程序。我必须不断更新我的图形用户界面&#xff0c;其中包含许多面板。每个面板包含一个wx.StaticText。我必须不断更新这些wx.StaticTexts。我想用threads。我还使用pubsub模块与GUI通信来更新这些wx.StaticTexts。每件事…

Pytorch代码函数笔记

1.torch.squeeze(): 要对数据的维度进行压缩&#xff0c;去掉维数为1的的维度&#xff0c;比如是一行或者一列这种&#xff0c;一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成&#xff08;3&#xff09;行。 2.nn.Sequential(): 一个有序的容器,神经网络模块将按…

apache poi_将HTML转换为Apache POI的RichTextString

apache poi1.概述 在本教程中&#xff0c;我们将构建一个将HTML作为输入的应用程序&#xff0c;并使用提供HTML的RichText表示形式创建Microsoft Excel工作簿。 为了生成Microsoft Excel工作簿&#xff0c;我们将使用Apache POI 。 为了分析HTML&#xff0c;我们将使用Jericho。…

Windows 下有哪些逆天的软件?

文章目录逆天软件系列1&#xff1a;Everything逆天软件系列2&#xff1a;Total Commander逆天软件系列3&#xff1a;Snipaste逆天软件系列4&#xff1a;Microsoft To-Do逆天软件系列5&#xff1a;ScreenToGIF逆天软件系列6&#xff1a;Geek Uninstaller逆天软件系列7&#xff1…

C++中绘图工具EasyX基本操作

使用头文件 #include <graphics.h>创建和关闭图形界面 initgraph(800,600); //创建图形界面&#xff0c;参数:图形宽度&#xff0c;图形高度 closegraph(); //关闭图形界面画图形形状 //画圆&#xff0c;参数&#xff1a;圆心点x坐标&#xff0c;圆心点y坐标,半径mm c…

oracle adf_Fn函数来构建Oracle ADF应用程序

oracle adf在我之前的一篇文章中&#xff0c;我描述了如何创建一个Docker容器作为ADF应用程序的构建器。 在这里&#xff0c;我将展示如何将此容器用作 在FN平台的功能 。 首先&#xff0c;让我们更新容器&#xff0c;使其符合功能要求&#xff0c;这意味着可以将其作为接受某…

Sublime Text 4.0 4102 安装插件的问题

文章目录安装包控件&#xff08;Package Control&#xff09;如何安装插件打开 Install Package 面板搜索和安装插件无法打开 Install Package 面板的问题故障排除安装包控件&#xff08;Package Control&#xff09; 要安装插件&#xff0c;必须先安装 Package Control&#…

系统制成docker镜像_docker 制作自己的镜像

查看 docker的服务状态systemctl status docker如果没有启动的话&#xff0c;要先启动 docker 服务systemctl start docker制作自己的镜像1.从远程仓库拉取一个纯净的 centos 系统镜像查询 centos 相关的镜像docker search centos下载镜像到本地docker pull 镜像名查看本地镜像…

Pytorch机器学习/深度学习代码笔记

代码步骤笔记导入模块设置参数数据预处理定义数据集1.Dataset2.ImageFolder加载数据集DataLoadertorchvision--数据预处理要使用的库torchvision.datasetstorchvision.modelstorchvision.transforms训练网络参数训练前的准备设置指定的训练设备(GPU、CPU)定义损失函数定义优化器…

maven安装教程安装教程_Maven教程之春

maven安装教程安装教程1.简介 在这篇文章中&#xff0c;我们将演示如何针对非常特定的用例对Spring使用Maven依赖项。 我们使用的所有库的最新版本都可以在Maven Central上找到。 对于一个有效的构建周期来说&#xff0c;了解Maven依赖项的工作方式以及如何对其进行管理很重要…

如何完全卸载 Sublime Text

只是在应用程序删除软件是不够&#xff0c;你还必须把下面这个目录删除掉才行&#xff1a; /Users/liaowenxiong/Library/Application Support/Sublime Text /Users/liaowenxiong/Library/Preferences/Sublime Text /Users/liaowenxiong/Library/Caches/Sublime Text不这么干&…

5位随机数重复的概率 php_PHP产生不重复随机数的5个方法总结

无论是Web应用&#xff0c;还是WAP或者移动应用&#xff0c;随机数都有其用武之地。在最近接触的几个小项目中&#xff0c;我也经常需要和随机数或者随机数组打交道&#xff0c;所以&#xff0c;对于PHP如何产生不重复随机数常用的几种方法小结一下(ps&#xff1a;方法1、4、5是…

pytorch实现图像分类代码实例

图像多标签分类例子 import os import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision.datasets as datasets import torchvision.models as models import matplotlib.pyplot as plt from matplotlib.ticker import MultipleL…

空调吸气和排气_吸气剂和二传手被认为有害

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

Sublime Text for Mac 如何格式化代码

文章目录格式化 HTML/CSS/JS格式化 Java/C/C格式化 HTML/CSS/JS 格式化 HTML/CSS/JS&#xff0c;请安装插件&#xff1a;html-css-js prettify 格式化的快捷键&#xff1a;Shift Cmd H html-css-js prettify 的简介&#xff1a; Usage Tools -> Command Palette (CmdS…