使用oauth2实现第三方登录

简介

OAuth 2.0 是一种授权框架,它允许第三方应用访问用户在某个服务(如 QQ、微信、gitee、GitHub 等)上存储的信息,而无需将用户的用户名和密码暴露给该第三方应用。这使得 OAuth 2.0 成为实现第三方登录(也称为社交登录)的理想选择。

参考

开箱即用的整合第三方登录的开源组件:JustAuth

实现过程

1.注册并配置 OAuth 提供商

你需要在你想让用户通过其登录的 OAuth 提供商(如 QQ、微信等)上注册你的应用。这通常涉及以下几个步骤:

  • 访问提供商的开发者平台。
  • 注册你的应用并获取一个客户端 ID 和客户端密钥(或密钥对)。
  • 配置应用的授权回调 URL,这是用户授权后,OAuth 提供商会将用户重定向回你的应用的 URL。

2. 用户重定向到 OAuth 提供商的授权页面 

在用户决定使用第三方登录时,你的应用需要将用户重定向到 OAuth 提供商的授权页面。这个请求通常包含你的客户端 ID、重定向 URI、请求的作用域(如用户的邮箱地址、名字等)以及可能的响应类型(通常是 code,用于授权码流程)。

3. 用户授权并返回授权码

用户在 OAuth 提供商的页面上登录并授权你的应用访问其数据。如果授权成功,OAuth 提供商会将用户重定向回你的应用,并在重定向 URI 中包含一个授权码(或令牌,取决于你使用的流程)。

4.使用授权码请求访问令牌

你的应用需要向 OAuth 提供商发送一个请求,包括客户端 ID、客户端密钥、重定向 URI(用于验证请求的来源)和授权码。如果验证成功,OAuth 提供商会返回一个访问令牌(Access Token)和(可选的)一个刷新令牌(Refresh Token)。

5.使用访问令牌访问用户数据

现在,你可以使用这个访问令牌向 OAuth 提供商的 API 发起请求,以获取用户的个人信息或执行其他操作。访问令牌通常有一个过期时间,因此你需要在每次请求时都带上它。

以gtiee为例

1.配置gitee,获取Client ID、Client Secret

  • 注册或登录gitee,找到设置,点击数据管理下的第三方应用,选择创建应用

 

 创建后会生成Client ID、Client Secret

2. 后端配置

xml配置

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>me.zhyd.oauth</groupId>
            <artifactId>JustAuth</artifactId>
            <version>1.16.6</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.25</version>
        </dependency>

@RequestMapping("/oauth")
@RestController
public class DemoController {
    
    @RequestMapping("/render")
    public void renderAuth( HttpServletResponse response) throws IOException {
        AuthRequest authRequest = getAuthRequest();
        String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
        response.sendRedirect(authorizeUrl);
    }

    @RequestMapping("/callback")
    public Object login(AuthCallback callback) {
        AuthRequest authRequest = getAuthRequest();
        return authRequest.login(callback);
    }
    
    private AuthRequest getAuthRequest() {
        // 创建授权request
        AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
                .clientId("配置gitee生成的clientId")
                .clientSecret("配置gitee生成的clientSecret")
                .redirectUri("http://localhost:8098/oauth/callback")
                .build());
        return authRequest;
    }
}

3.运行项目

打开浏览器,访问这个网址:http://localhost:8098/oauth/render

出现以下内容表示配置成功

选择同意授权,会出现一个json格式的数据,表示授权成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值