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

本文介绍了如何使用OAuth2.0和Okta在5分钟内为Spring应用程序添加专业级别的安全认证。通过手动配置,展示了如何创建用户登录、使用Okta账户以及启用OAuth2.0登录,帮助开发者理解Spring安全、Spring Boot和Java认证。
摘要由CSDN通过智能技术生成

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();

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder())
                .withUser("john.doe")
                .password(passwordEncoder().encode("secret"))
                .roles("USER");
    }

    @Bean
    public 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? 您可能对以下文章感兴趣:

有关此类文章的更多信息, 请在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值