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

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

In this tutorial, you’ll create an application that displays user information. You’ll configure it manually first to see its drawbacks. Then, we’ll use a more professional approach. By the end of this tutorial, you’ll have a Spring-based Java application that uses OAuth 2.0 to authenticate users, and it will take you 5 minutes to make these changes!

Create Your Java Application with Spring

Let’s start by creating the project structure. You’ll use Spring Initializer to create the application. Go to start.spring.io and fill in the following information:

  • 项目:Maven项目语言:爪哇组:com.okta.authorizationapp工件:认证Dependencies:春季网春季安全胸腺

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

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项目结构已创建,您可以开始开发应用程序了。

Build User Security on Your Own

本教程将使用Maven,但如果愿意,您可以使用Gradle轻松完成。

首先,将项目导入您喜欢的IDE /编辑器中。 现在,您的项目只有一个班级,AuthorizationAppApplication引导应用程序。 运行此类时,服务器将启动,并且您可以转到浏览器以查看结果。

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

内src / main / java / com / okta / authorizationapp / controller /创建课程家庭控制器:

@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";
    }
}

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

控制器的第一个重要操作将检索当前用户的信息。 由于您注释了用户具有属性身份验证主体,Spring Security将自动检索此信息。

控制器还会收到一个模型参数,用于存储用于呈现页面的数据。 现在,这些数据是用户名以及用户上次访问您的应用程序的时间。

Create Dynamic Messages on User Login

最后一步是更新用户的上次访问日期,并定义应呈现请求的HTML模板。 在您的情况下,端点称为家。 春天会寻找一个家.html里面的文件src / main / resources / templates夹。

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

<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: ' + $"></li>
    </ul>
  </body>
</html>

This is an HTML file altered slightly by Ťhymeleaf, one of the libraries you imported when you created the project. Thymeleaf receives the model object from the server and renders the values from it in HTML. Just type ${variable} to refer to a variable in the model object.

的文字属性可让您在HTML元素中定义动态文本。 在这里,我们使用它来显示动态问候语,以及用户最后一次访问该应用程序的时间。

用户首次访问您的应用时,不会记录任何先前的访问。 为确保您没有提出毫无意义的字段,请使用如果。 如果该字段是空值,里标签未呈现,用户将看不到它。

Add Basic Login to Your Java Spring App

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

内src / main / javacom / okta / authorizationapp / configuration /创建课程安全配置:

@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;
    }
}

此类将确保用户必须登录才能访问您的应用程序。 现在只有一个名为约翰·杜谁可以登录该应用。

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

mvn spring-boot:run

当你去http://本地主机:8080您应该看到以下登录页面:

Java Login

类型约翰·杜和秘密 as username和password. You should be redirected to the home page. On the first visit, only Welcome, 约翰·杜!将显示。 从第二次访问开始,您还应该看到最后一次访问:

Homepage

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

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

Create an Okta Account

If you don’t have an Okta account, go ahead and create one. Once you have signed up, go through the following steps:

  • 登录到您的帐户点击应用领域 > 添加申请

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

Okta application page

  • 选择网页然后点击下一个

在表格中填写以下选项:

  • 名称:你好,世界基本URI:http://本地主机:8080登录重定向网址:http://本地主机:8080/login/oauth2/code/oktaGrant Type allowed:客户凭证授权码请点击完成。

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

Use OAuth 2.0: A Fast, Professional Approach

首先,将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将管理您的应用身份验证,因此您可以删除安全配置类。

内家庭控制器,请进行以下更改:

@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";
}

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

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

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

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

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

  • 在您的Okta仪表板中,转到应用领域选择你好,世界应用点击一般标签

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

将这些值粘贴到之后okta.env,请运行以下命令以启动您的应用。

source okta.env
mvn spring-boot:run

而已!

Log Into Your Spring App With OAuth 2.0 Enabled

导航http://本地主机:8080。 您的应用会将您重定向到Okta的登录页面:

Okta Login Page

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

Java OAuth 2.0 User Info

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

Learn More About Spring Security, Spring Boot and Java Authentication

If you want to take a look at the completed source code, you can access it on GitHub.

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

For more articles like this one, follow @oktadev on Twitter. We also regularly publish screencasts to our YouTube channel.

from: https://dev.to//oktadev/oauth-2-0-java-guide-secure-your-app-in-5-minutes-7n8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值