Authgear是一个免费使用的身份平台,可管理对应用程序的访问。它使用特殊 OpenID Connect(OIDC)协议和 oauth 2.0授权框架来确认用户是谁,并允许/允许他们访问受保护的资源。借助Authgear,您可以轻松地添加不同的方式供用户登录和访问您的应用程序和API,而无需担心所有这些工作的技术细节。 Authgear负责验证用户并授予他们许可的复杂部分,因此您可以专注于构建应用程序和业务价值功能。
在这篇文章中,您将学习如何将身份验证添加到Java Spring Boot应用程序使用OAuth2â和Authgear作为身份提供商(IDP)。
学习目标
您将在整篇文章中学习以下内容:
- 授权代码流的工作方式。
- 如何在authgear上创建应用程序。
- 如何启用基于电子邮件的登录。
- 添加注册和登录功能到Spring Boot应用程序。
授权代码流如何与authgear一起使用
在深入实施之前,让我们首先了解Authorization Code Flow在我们的示例中起作用。该流程只能用于机密应用程序(例如常规Web应用程序),因为交换令牌的授权代码。这是此流程中的步骤:
- 用户选择登录在春季应用程序中。
-
弹簧安全将用户重定向到 authgear授权服务器(
/oauth2/authorize
端点)。 - authgear 将用户重定向到登录页面和授权提示。
- 用户使用配置的login options进行身份验证(例如,通过电子邮件)。
- authgear 使用一次性授权代码将用户重定向到应用程序。
-
Spring OAuth2 客户端将授权代码,应用程序的客户端ID和应用程序的凭据(例如客户端秘密)发送到 authgear (
/oauth2/token
Endpoint)。 - authgear 验证授权代码,应用程序的客户端ID和应用程序的凭据。
- authgear 以ID令牌和访问令牌做出响应(并且可选,是刷新令牌)。
- 该应用程序可以使用访问令牌调用API来访问有关用户的信息。
- API响应请求的数据。
将登录添加到您的Spring WebApp
此示例使用Spring MVC * *与Thymeleaf和SpringSecurity 6一起构建常规的Web应用程序,并使用Authgear **添加AuthGear的登录页面添加身份验证。可以找到示例的完整源代码。
先决条件
在开始之前,您将需要以下内容:
第1部分:配置authgear
要使用Authgear服务,您需要在Authgear Dashboard中设置应用程序。 Authgear应用程序是您将配置要为您正在开发的项目工作的身份验证的方式。
步骤1:配置应用程序
使用交互式选择器创建一个新的 authgear oidc client应用程序或选择代表您要集成的项目的现有应用程序。
AuthGear中的每个应用程序都分配了您的应用程序代码通过Spring Boot OAuth 2 Client调用Authgear API的字母数字,唯一的客户端ID。请注意,从输出中,请注意authgear发行者(例如,koude2),CLIENT ID
,CLIENT SECRET
和openID端点。您将在下一步中为客户端应用程序配置使用这些值。
步骤2:配置重定向URI
a 重定向URI 是您的应用程序中的一个URL,您希望Authgear将用户重定向到他们身份验证后。在我们的情况下,它将是我们的Spring Boot应用程序的主页。如果未设置,用户登录后将不会返回您的应用程序。
步骤3:选择登录方法
创建AuthGear应用程序后,您选择用户在登录页面上进行的方式进行身份验证。从“身份验证”选项卡中,导航到登录方法,您可以从各种选项中选择登录方法,包括通过电子邮件,移动或社交,只需使用用户名或您指定的自定义方法。对于此演示,我们选择电子邮件+无密码方法,要求我们的用户注册帐户并使用其电子邮件登录。他们将收到一次电子邮件(OTP)的电子邮件,并验证使用该应用的代码。
第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/
上运行的页面时,我们将显示页面上的按钮登录或注销:
步骤5:添加控制器
接下来,我们创建一个控制器类来处理传入请求。该控制器呈现home.html
页面。当用户验证用户时,应用程序会检索用户的个人资料信息属性以渲染页面。
@Controller
public class HomeController {
@GetMapping("/")
String home() {
return "home";
}
}
步骤6:运行应用程序
要运行应用程序,您可以执行mvn spring-boot:run
目标。或从编辑器运行主ExampleApplication.java
文件。示例应用程序将在http://localhost:8080/
上找到。
单击登录'按钮要重定向到authgear登录页面。
您还可以从authgear门户自定义登录页UI视图。注册后,您将在电子邮件中收到一个OTP代码以验证您的身份。
并登录到您的新帐户,您将重定向到主页:
您已成功配置了Spring Boot应用程序,以使用Authgear进行身份验证。现在,用户可以注册一个新帐户,登录并注销。
下一步
使用Authgear可以做更多的事情。探索其他登录方法的方法,例如在电子邮件,social logins或WhatsApp OTP中使用Magic links。对于当前应用程序,您也可以从Authgear Portal中进行add more users。
相关资源
- Authentication-as-a-Service: What Is It and Why You Need It
- Frictionless Authentication: What Is It & How To Implement It?
建议的内容
- Social Login - Why You Should Implement It
- Web Application Authentication: How It Works and How to Implement It
社区
ðJoin the Authgear Community on Discord
2°m Ask questions
关于作者
请访问我的博客:âwww.iambobur.com