Java项目中集成Github登录

要在你的 Java 后端系统中集成 GitHub 的第三方登录功能,通常可以通过 OAuth 2.0 协议实现。这是 GitHub 提供的官方认证方式,它允许你通过 GitHub 登录你的应用,并获取用户的基本信息。以下是集成 GitHub 登录的基本步骤:

1. 创建 GitHub OAuth 应用

在开始集成之前,首先需要在 GitHub 创建一个 OAuth 应用来获得 Client ID 和 Client Secret。

  1. 登录到你的 GitHub 账户。
  2. 进入 GitHub 开发者设置:GitHubDeveloperSettings。
  3. 点击 OAuth Apps ,然后点击 New OAuth App。
  4. 填写必要的应用信息:
    • Application name: 你的应用名称
    • Homepage URL: 你的应用首页 URL
    • Authorization callback URL : 你的后端应用中处理 GitHub 回调的 URL,例如 http://localhost:8080/login/github/callback(具体的 URL 取决于你的后端设置)
  1. 保存后,你将获得 Client ID 和 Client Secret,它们会在后续步骤中用到。

2. 配置 Spring Security 和 OAuth2 登录

假设你的后端是基于 Spring Boot 和 Spring Security 的,下面是如何配置 GitHub OAuth 登录的步骤:

2.1. 添加相关依赖

在你的 pom.xml 中添加必要的依赖:

vb 复制代码
`<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <!-- Spring Security OAuth2 Login -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>`
2.2. 配置 application.yml****或 application.properties

在你的 application.yml 或 application.properties 中,配置 GitHub 的 OAuth 客户端 ID 和客户端密钥。

java 复制代码
spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: YOUR_CLIENT_ID
            client-secret: YOUR_CLIENT_SECRET
            scope: read:user, user:email
            redirect-uri: "{baseUrl}/login/oauth2/code/github"
            authorization-grant-type: authorization_code
            client-name: GitHub
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user
            user-name-attribute: login
  • client-id 和 client-secret 是你在 GitHub 开发者设置页面上获得的。
  • scope 用于定义访问的权限,read:user 获取基本的用户信息,user:email 用于获取用户的邮箱。
  • redirect-uri 是 GitHub 登录成功后将跳转的地址,通常会是你后端系统的某个接口,用于处理 GitHub 回调。
2.3. 配置 Spring Security

你还需要在 SecurityConfig 中配置 Spring Security,确保 GitHub 登录能够正常工作。

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll() // 允许公共页面
                .anyRequest().authenticated() // 其余请求需要认证
            .and()
            .oauth2Login() // 启用 OAuth2 登录
                .loginPage("/login") // 登录页面(可选)
                .defaultSuccessUrl("/dashboard", true); // 登录成功后跳转的页面
    }
}

3. 处理 OAuth 回调

当用户通过 GitHub 登录后,GitHub 会将用户重定向到你配置的回调 URL,你需要在后端处理这个回调来获取用户信息。

Spring Security 会自动处理 OAuth 回调,你可以在回调成功后获取用户信息。例如,你可以创建一个简单的控制器来处理用户登录后跳转的页面:

java 复制代码
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Controller;

@Controller
public class GitHubController {

    @GetMapping("/login/github")
    public String loginSuccess(@AuthenticationPrincipal OAuth2User principal) {
        // 获取用户信息
        System.out.println("GitHub User: " + principal.getAttributes());

        // 返回一个欢迎页面或跳转到应用的其他页面
        return "redirect:/dashboard";
    }
}
  • @AuthenticationPrincipal OAuth2User principal 注解会将 GitHub 返回的用户信息注入到 principal 中,你可以通过 principal.getAttributes() 获取用户的基本信息。

4. 前端登录按钮

在你的前端页面上,你可以通过链接或按钮引导用户进行 GitHub 登录。Spring Security 会自动处理登录流程。

复制代码
<a href="/oauth2/authorization/github">Login with GitHub</a>

5. 获取 GitHub 用户信息

你可以从 OAuth2User 中获取 GitHub 用户的详细信息,如用户名、邮箱等。

java 复制代码
import org.springframework.security.oauth2.core.user.OAuth2User;

public void printUserInfo(OAuth2User user) {
    String username = user.getAttribute("login"); // GitHub username
    String email = user.getAttribute("email");   // GitHub email (if the user has allowed it)
    System.out.println("GitHub Username: " + username);
    System.out.println("GitHub Email: " + email);
}
相关推荐
学逆向的3 分钟前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
silvamux_12 分钟前
Spring Boot 调用大模型 api 最小可跑教程
java·spring boot·后端
今年下半年15 分钟前
【Spring Boot 】通过 OpenFeign 请求第三方接口
java·spring boot·后端·openfeign
范什么特西24 分钟前
亲和路由(inspect)
java
她说可以呀27 分钟前
Docker 镜像的两种创建方式
java·分布式·docker
霸道流氓气质36 分钟前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
愿得一猪蹄1 小时前
# Java线程池实战,别再new Thread了
java
穆梓兰煊1 小时前
Flutter端云协同推理架构解析
flutter·github
ee又momo1 小时前
# 深入理解Java注解,从使用到自定义
java
释厄6231 小时前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin