带有authgear和oauth2的Spring Boot应用的身份验证2
#网络开发人员 #安全 #java #lowcode

Authgear是一个免费使用的身份平台,可管理对应用程序的访问。它使用特殊 OpenID Connect(OIDC)协议和 oauth 2.0授权框架来确认用户是谁,并允许/允许他们访问受保护的资源。借助Authgear,您可以轻松地添加不同的方式供用户登录和访问您的应用程序和API,而无需担心所有这些工作的技术细节。 Authgear负责验证用户并授予他们许可的复杂部分,因此您可以专注于构建应用程序和业务价值功能。

在这篇文章中,您将学习如何将身份验证添加到Java Spring Boot应用程序使用OAuth2â和Authgear作为身份提供商(IDP)。

学习目标

您将在整篇文章中学习以下内容:

  • 授权代码流的工作方式。
  • 如何在authgear上创建应用程序。
  • 如何启用基于电子邮件的登录。
  • 添加注册和登录功能到Spring Boot应用程序。

授权代码流如何与authgear一起使用

在深入实施之前,让我们首先了解Authorization Code Flow在我们的示例中起作用。该流程只能用于机密应用程序(例如常规Web应用程序),因为交换令牌的授权代码。这是此流程中的步骤:

Authorization Code Flow works with Authgear

  1. 用户选择登录春季应用程序中
  2. 弹簧安全将用户重定向到 authgear授权服务器/oauth2/authorize端点)。
  3. authgear 将用户重定向到登录页面和授权提示。
  4. 用户使用配置的login options进行身份验证(例如,通过电子邮件)。
  5. authgear 使用一次性授权代码将用户重定向到应用程序。
  6. Spring OAuth2 客户端将授权代码,应用程序的客户端ID和应用程序的凭据(例如客户端秘密)发送到 authgear /oauth2/token Endpoint)。
  7. authgear 验证授权代码,应用程序的客户端ID和应用程序的凭据。
  8. authgear 以ID令牌和访问令牌做出响应(并且可选,是刷新令牌)。
  9. 该应用程序可以使用访问令牌调用API来访问有关用户的信息。
  10. API响应请求的数据。

将登录添加到您的Spring WebApp

此示例使用Spring MVC * *与ThymeleafSpringSecurity 6一起构建常规的Web应用程序,并使用Authgear **添加AuthGear的登录页面添加身份验证。可以找到示例的完整源代码。

先决条件

在开始之前,您将需要以下内容:

  • Java 17或更高。如果还没有,则可以使用SDKMAN!安装Java。
  • a 免费的authgear帐户Sign up如果您还没有一个。

第1部分:配置authgear

要使用Authgear服务,您需要在Authgear Dashboard中设置应用程序。 Authgear应用程序是您将配置要为您正在开发的项目工作的身份验证的方式。

步骤1:配置应用程序

使用交互式选择器创建一个新的 authgear oidc client应用程序或选择代表您要集成的项目的现有应用程序。

Authgear OIDC Client application

AuthGear中的每个应用程序都分配了您的应用程序代码通过Spring Boot OAuth 2 Client调用Authgear API的字母数字,唯一的客户端ID。请注意,从输出中,请注意authgear发行者(例如,koude2),CLIENT IDCLIENT SECRET和openID端点。您将在下一步中为客户端应用程序配置使用这些值。

Authgear is assigned an alphanumeric, unique client ID

步骤2:配置重定向URI

a 重定向URI 是您的应用程序中的一个URL,您希望Authgear将用户重定向到他们身份验证后。在我们的情况下,它将是我们的Spring Boot应用程序的主页。如果未设置,用户登录后将不会返回您的应用程序。

步骤3:选择登录方法

创建AuthGear应用程序后,您选择用户在登录页面上进行的方式进行身份验证。从“身份验证”选项卡中,导航到登录方法,您可以从各种选项中选择登录方法,包括通过电子邮件,移动或社交,只需使用用户名或您指定的自定义方法。对于此演示,我们选择电子邮件+无密码方法,要求我们的用户注册帐户并使用其电子邮件登录。他们将收到一次电子邮件(OTP)的电子邮件,并验证使用该应用的代码。

Choose a Login method in Authgear

第2部分:配置Spring Boot应用程序

步骤1:添加春季依赖项

为了创建一个新的春季启动应用程序,您可以使用Spring Initializr。然后,您将依赖项添加到pom.xml文件中,例如 spring-boot-starter-oauth2-client* ***启动器提供在您的Web应用程序中添加身份验证所需的所有弹簧安全依赖项,并且使用ThymeLeaf来构建单页UI。

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity6</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>
    </dependencies>

步骤2:使用Authgear配置OIDC身份验证

Spring Security可以轻松地与OIDC提供商(例如Authgear)配置应用程序以进行身份​​验证。我们需要使用您的Auhgear提供商配置将客户端凭据添加到 application.properties 文件中。您可以使用下面的示例,并用Authgear应用中的值替换属性:

spring.security.oauth2.client.registration.authgear.client-id={your-client-id}
spring.security.oauth2.client.registration.authgear.client-secret={your-client-secret}
spring.security.oauth2.client.registration.authgear.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.authgear.scope=openid
spring.security.oauth2.client.registration.authgear.redirect-uri=http://localhost:8080/
spring.security.oauth2.client.provider.authgear.token-uri=https://{DOMAIN}/oauth2/token
spring.security.oauth2.client.provider.authgear.authorization-uri=https://{DOMAIN}/oauth2/authorize

# To logout from the app
authgear.oauth2.end-session-endpoint=https://{DOMAIN}/oauth2/end_session

步骤3:将登录添加到您的应用程序

要使用Authgear启用用户登录,创建一个将提供一个实例的类,该类将提供一个 securityFilterChain 的实例,添加@EnableMethodSecurity注释,然后覆盖必要的方法:

@Configuration
@EnableMethodSecurity(securedEnabled = true)
public class SecurityConfig {

    @Value("${authgear.oauth2.end-session-endpoint}")
    private String endSessionEndpoint;

    @Bean
    public SecurityFilterChain configure(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests((requests) -> requests
                // allow anonymous access to the root page
                .requestMatchers("/").permitAll()
                // authenticate all other requests
                .anyRequest().authenticated())
            // enable OAuth2/OIDC
            .oauth2Login(withDefaults())
            // configure logout handler
            .logout(logout -> logout.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/")
                .addLogoutHandler(oidcLogoutHandler()));
        return http.build();
    }

    LogoutHandler oidcLogoutHandler() {
        return (request, response, authentication) -> {
            try {
                response.sendRedirect(endSessionEndpoint);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        };
    }
}

步骤4:添加首页

我们使用百里叶模板创建一个简单的home.html页面。当用户打开在http://localhost:8080/上运行的页面时,我们将显示页面上的按钮登录或注销:

 Add front page

步骤5:添加控制器

接下来,我们创建一个控制器类来处理传入请求。该控制器呈现home.html页面。当用户验证用户时,应用程序会检索用户的个人资料信息属性以渲染页面。

@Controller
public class HomeController {
    @GetMapping("/")
    String home() {
        return "home";
    }
}

步骤6:运行应用程序

要运行应用程序,您可以执行mvn spring-boot:run目标。或从编辑器运行主ExampleApplication.java文件。示例应用程序将在http://localhost:8080/上找到。

Run the Application

单击登录'按钮要重定向到authgear登录页面。

be redirected to the Authgear login page

您还可以从authgear门户自定义登录页UI视图。注册后,您将在电子邮件中收到一个OTP代码以验证您的身份。

receive an OTP code in your email to verify your identity

并登录到您的新帐户,您将重定向到主页:

redirected back to the home page

您已成功配置了Spring Boot应用程序,以使用Authgear进行身份验证。现在,用户可以注册一个新帐户,登录并注销。

下一步

使用Authgear可以做更多的事情。探索其他登录方法的方法,例如在电子邮件,social loginsWhatsApp OTP中使用Magic links。对于当前应用程序,您也可以从Authgear Portal中进行add more users

相关资源

建议的内容

社区

ðJoin the Authgear Community on Discord

Follow on Twitter

2°m Ask questions

ðCheck out open-source SDKs

关于作者

请访问我的博客:âwww.iambobur.com