java oauth2.0

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。

现代应用程序依赖于用户身份验证,但是它可能给Java开发人员带来困难的挑战,以及一系列特定于框架的选项供您选择。 我们已经看到许多Spring开发人员从一个简单的本地身份验证服务开始,他们计划用一个更强大的选项替换“后来的”……只是为了让该本地服务将其方式扩展到堆栈中的永久位置。 为了结束这一令人心碎的循环,这篇文章将展示即使在一个简单的应用程序中,实现企业级身份验证服务也是如此简单。

在本教程中,您将创建一个显示用户信息的应用程序。 您将首先手动配置它,以查看其缺点。 然后,我们将使用更专业的方法。 在本教程结束时,您将拥有一个基于Spring的Java应用程序,该应用程序使用OAuth 2.0对用户进行身份验证,并且需要5分钟的时间进行这些更改!

使用Spring创建Java应用程序

让我们从创建项目结构开始。 您将使用Spring Initializer创建应用程序。 转到start.spring.io并填写以下信息:

  • 项目: Maven项目
  • 语言: Java
  • 组: com.okta.authorizationapp
  • 工件: oauth
  • 依存关系:
    • Spring网

您也可以从命令行生成项目。 将以下命令粘贴到终端中,以使用与上述相同的配置下载项目:

curl https://start.spring.io/starter.zip \-d dependencies=web,thymeleaf,security \-d packageName=com.okta.authorizationapp \-d name=authorization-app \-d type=maven-project \-o java-authorization-app.zip

而已! 现在,您的Java项目结构已创建,您可以开始开发应用程序了。

自行构建用户安全性

本教程将使用Maven,但您可以根据需要轻松使用Gradle进行操作。

首先,将项目导入您喜欢的IDE /编辑器中。 现在,您的项目只有一个类,即引导应用程序的style="font-size:13px" class="highlighter-rouge">AuthorizationAppApplication 。 运行此类时,服务器将启动,并且可以转到浏览器以查看结果。

但是,您首先需要一个页面才能访问,因此让我们创建一个主页。

内部style="font-size:13px" class="highlighter-rouge">src/main/java/com/okta/authorizationapp/controller/创建类style="font-size:13px" class="highlighter-rouge">HomeController

@Controller
public class HomeController {private Map<String, LocalDateTime> usersLastAccess = new HashMap<>();@GetMapping("/")public String getCurrentUser(@AuthenticationPrincipal User user, Model model) {String username = user.getUsername();model.addAttribute("username", username);model.addAttribute("lastAccess", usersLastAccess.get(username));usersLastAccess.put(username, LocalDateTime.now());return "home";}
}

此类定义了/路径的控制器。 当您在未定义任何其他路径的情况下访问应用程序时,将执行此代码。

控制器的第一个重要操作将检索当前用户的信息。 由于您使用AuthenticationPrincipal注释了user属性,因此Spring Security将自动检索此信息。

控制器还接收一个model参数,该参数存储用于呈现页面的数据。 现在,此数据是username和用户上次访问您的应用程序的时间。

在用户登录时创建动态消息

最后一步是更新用户的上次访问日期,并定义应呈现请求HTML模板。 在您的情况下,端点称为home 。 Spring将在src/main/resources/templates文件夹中搜索home.html文件。

您还没有此文件,所以让我们去创建它:

<html><head><title>Java OAuth 2.0 Tutorial - Homepage</title></head><body><h1 th:text="'Welcome, ' + ${username} + '!'"></h1><ul><li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li></ul></body>
</html>

这是一个HTML文件,由Thymeleaf稍作更改, Thymeleaf是您在创建项目时导入的库之一。 Thymeleaf从服务器接收模型对象,并以HTML呈现该对象的值。 只需键入${variable}即可引用model对象中的变量。

通过th:text属性,您可以在HTML元素中定义动态文本。 在这里,我们使用它来显示动态问候语,以及用户上次访问该应用程序的时间。

用户首次访问您的应用时,不会记录任何先前的访问。 为了确保您不会出现无意义的字段,请使用th:if 。 如果该字段为null ,则不会呈现li标签,并且用户将看不到它。

将基本登录添加到Java Spring应用程序

现在有了端点,您只需要为应用程序添加安全性即可。

src/main/javacom/okta/authorizationapp/configuration/创建类SecurityConfiguration

@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {private PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().passwordEncoder(passwordEncoder()).withUser("john.doe").password(passwordEncoder().encode("secret")).roles("USER");}@Beanpublic PasswordEncoder passwordEncoder() {return passwordEncoder;}
}

此类将确保用户必须登录才能访问您的应用程序。 目前只有一个名为john.doe用户可以登录该应用程序。

通过调用AuthorizationAppApplication内部的main方法来运行应用程序。 您也可以从命令行运行它。 在项目文件夹中,运行以下命令:

mvn spring-boot:run

当您访问http://localhost:8080 ,应该看到以下登录页面:


键入john.doesecret作为用户名和密码。 您应该被重定向到主页。 第一次访问时,只有Welcome, john.doe! 将显示。 在第二次访问中,您还应该看到最后一次访问:


现在,您有了一个管理安全性的应用程序。 做得好!

但是,有一个大问题……现在您只能以一个用户身份登录。 更糟糕的是,用户信息被硬编码在您的应用程序中。 为了简化用户访问和安全性,您可以使用Okta来管理身份验证。 它将在5分钟内为您提供一种非常简单的方法来与OAuth 2.0集成。 让我们在示例应用中配置OAuth 2.0,以了解它的简易性。 首先创建一个Okta帐户。

创建一个Okta帐户

如果您没有Okta帐户, 请继续创建一个 。 注册后,请执行以下步骤:

  • 登录到您的帐户
  • 单击应用程序 > 添加应用程序

您将被重定向到以下页面:


  • 选择网站 ,然后单击下一步。

在表格中填写以下选项:

  • 名称: hello-world
  • 基本URI: http://localhost:8080
  • 登录重定向URL: http://localhost:8080/login/oauth2/code/okta
  • 允许的授予类型:
    • 客户凭证
  • 单击完成

现在,您可以使用Okta应用程序对应用程序的用户进行身份验证。

使用OAuth 2.0:一种快速,专业的方法

首先,将Okta的库添加到您的项目中。

转到pom.xml并添加Okta的Spring Boot启动器:

<dependency><groupId>com.okta.spring</groupId><artifactId>okta-spring-boot-starter</artifactId><version>1.3.0</version>
</dependency>

Okta将管理您的应用程序身份验证,因此您可以删除SecurityConfiguration类。

HomeController ,进行以下更改:

@GetMapping("/")
public String getCurrentUser(@AuthenticationPrincipal OidcUser user, Model model) {String email = user.getEmail();model.addAttribute("email", email);model.addAttribute("lastAccess", usersLastAccess.get(email));model.addAttribute("firstName", user.getGivenName());model.addAttribute("lastName", user.getFamilyName());usersLastAccess.put(email, LocalDateTime.now());return "home";
}

您的端点现在将收到与OAuth 2.0兼容的OidcUser 。 此类提供了比以前更多的用户信息,因此您可以修改HTML以显示它。 用email替换username ,并添加firstNamelastName ,这是您之前没有的字段。 为此,请转到hello.html并进行以下更改:

<body><h1 th:text="'Welcome, ' + ${email} + '!'"></h1><ul><li th:if="${lastAccess}" th:text="'Last access: ' + ${lastAccess}"></li><li th:if="${firstName}" th:text="'First name: ' + ${firstName}"></li><li th:if="${lastName}" th:text="'Last name: ' + ${lastName}"></li></ul>
</body>

您仍然像以前一样向用户打招呼,但同时还显示来自端点的新信息。 您已经对所有代码进行了更改,现在只需要添加一些配置即可。 使用以下环境变量在应用程序的根目录中创建okta.env文件。

export OKTA_OAUTH2_ISSUER=https://{yourOktaDomain}/oauth2/default
export OKTA_OAUTH2_CLIENT_ID={CLIENT_ID}
export OKTA_OAUTH2_CLIENT_SECRET={CLIENT_SECRET}

您可以从Okta信息中心的应用程序页面中找到{CLIENT_ID}{CLIENT_SECRET} 。 要访问它,请按照以下步骤操作:

  • 在您的Okta仪表板中,转到“ 应用程序”
  • 选择hello-world应用程序
  • 单击常规选项卡

您应该在“客户端凭据”区域中看到两个值。 您的{yourOktaDomain}将显示在Okta仪表板中,只需单击菜单中的“ 仪表板 ”即可。 您将在右上角看到组织URL。

将这些值粘贴到okta.env ,运行以下命令以启动应用程序。

source okta.env
mvn spring-boot:run

而已!

启用OAuth 2.0登录到您的Spring应用程序

导航到http://localhost:8080 。 您的应用程序会将您重定向到Okta的登录页面:


登录后,您将被重定向到您的应用程序,并看到以下消息:


你完成了! 在5分钟内,您只需很少的配置即可在应用程序中添加OAuth 2.0。

了解有关Spring安全性,Spring Boot和Java身份验证的更多信息

如果要查看完整的源代码,可以在GitHub上访问它。

您是否想全面了解OAuth 2.0和Java? 您可能对以下文章感兴趣:

  • Spring Boot登录选项快速指南
  • 具有PreAuthorize的Spring方法安全性
  • 使用Spring Boot Actuator监视Java应用程序

有关此类文章的更多信息, 请在Twitter上关注@oktadev 。 我们还会定期将截屏视频发布到我们的YouTube频道 。

使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 今天尝试Okta。


翻译自: https://www.javacodegeeks.com/2019/12/oauth-2-0-java-guide-secure-your-app-in-5-minutes.html

java oauth2.0

java oauth2.0_OAuth 2.0 Java指南:5分钟保护您的应用程序安全相关推荐

  1. OAuth 2.0 Java指南:5分钟保护您的应用程序安全

    使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. 现代应用程序依赖于用户身份验证,但是它可能给J ...

  2. java月份前面去掉0,JAVA日期格式输出月度前面不想被自动补0

    JAVA日期格式输出月份前面不想被自动补0 JAVA日期格式输出月份前面不想被自动补0,那么就用SimpleDateFormat("M/dd/yyyy");,一个M. 如果想被自动 ...

  3. java 连接mysql 8.0,java连接mysql 8.0的问题

    mysql 8.0 是现在较新的版本,所以很多项目都开始用户mysql 8,在使用java连接mysql 8的时候,很多人想当然觉得需要使用新的连接驱动程序,比如mysql-connector-jav ...

  4. java属性定义_Java管理扩展指南--几分钟带你理解MBean

    2 MBean简介 2.1. MBeans简要介绍 本课程介绍JMX API的基本概念,它被称之为被管理的bean,或者MBean. MBean是一个被管理的Java对象,就像Javabean组件一样 ...

  5. java判断long 大于0,JAVA的一道习题:找出五个大于Long.MAX_VALUE的素数

    在素数判断方法isPrime处不知道该怎么写才能让程序跑出结果而不用等到天长地久... public static void main(String[] args) { long startTime ...

  6. java oauth2.0_教程:如何实现Java OAuth 2.0以使用GitHub和Google登录

    java oauth2.0 将Google和GitHub OAuth登录添加到Java应用程序的指南 我们添加到Takipi的最新功能之一是3rd party登录. 如果您像我一样懒惰,那么我想您也希 ...

  7. java opengl es_OPENGL ES 3.0编程指南

    OPENGL ES 3.0编程指南 OPENGL ES 3.0编程指南\.gitignore, 215, 2017-05-03 __MACOSX __MACOSX\OPENGL ES 3.0编程指南 ...

  8. Gradle2.0用户指南翻译——第七章. Java 快速入门

    翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc 本文翻译所在分支: https://github.com/msdx/gradledoc/tre ...

  9. Java并发编程-并发工具包(java.util.concurrent)使用指南(全)

    1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...

最新文章

  1. python tkinter窗口弹出置顶的方法
  2. NeurIPS 2020 :ReID任务大幅领先,港中文开源自步对比学习框架,充分挖掘无监督学习样本...
  3. 数学图形(2.7)sphere sine wave
  4. [二叉树] 二叉树的最近公共祖先--leetcode236
  5. 理解Node.js的event loop
  6. C++11多线程------std::async
  7. 500g linux怎么分区吗,500G的硬盘,怎么分区比较合理?
  8. “Hello World!“”团队第七周召开的第二次会议
  9. 在Spring MVC中使用FileUpload功能
  10. git pull问题解决error: cannot lock ref
  11. CSS之cursor用法
  12. 如何在github用git Pages上传自己在本地做的项目?
  13. 空气质量监测管理系统
  14. redis与数据库同步的解决方案
  15. wifi android kernel,android wifi 驱动框架简介
  16. 计算机会计电算化与实训报告,会计电算化实训总结报告
  17. 漫谈Anchor-based和Anchor-Free
  18. 计算机组成原理中的DUBS是,[转帖]实验室名称中英文对照大整理
  19. 计算机详细配置快捷键,Win7系统电脑快捷键设置大全
  20. 备战sp23春招 day8 | 344.反转字符串 541. 反转字符串II 剑指 05.替换空格 151.翻转字符串里的单词 剑指58-II.左旋转字符串

热门文章

  1. QDU-Training-01
  2. P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
  3. CSP2019洛谷P5665:划分(单调队列,高精度)
  4. P3702-[SDOI2017]序列计数【矩阵乘法】
  5. P2485-[SDOI2011]计算器【BSGS,exgcd,快速幂】
  6. jzoj1758-过河【dp】
  7. 2021牛客暑期多校训练营4 B-Sample Game(概率DP)
  8. HDU5120 - Intersection
  9. Tomcat 的 Server 文件配置详解
  10. [初级]Java命令学习系列(七)——javap