java 集成 Google 登录

1 Oauth2.0

在这里插入图片描述
步骤:

1 请求授权服务获取授权code。
2 用授权code请求token。
3 用token请求用户信息。

ps:oauth2.0 详情不懂的可以自己百度,也可以去b站学习。

2 google 授权配置

2.1 配置网站

https://console.cloud.google.com/

2.2 配置投屏

在这里插入图片描述

2.3 凭据

在这里插入图片描述

3 JAVA 代码

3.1 pom

 <dependency>
            <groupId>com.google.auth</groupId>
            <artifactId>google-auth-library-oauth2-http</artifactId>
            <version>0.22.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client</artifactId>
            <version>1.32.1</version>
        </dependency>

3.2 授权码回调接口

@RestController
public class GoogleController {


    @GetMapping("/code")
    public String getCode(HttpServletRequest request) {

        return request.getParameter("code");
    }

}

3.3 获取授权码

描述: 运行后,直接访问,获取授权码

public static void main(String[] args) throws GeneralSecurityException, IOException {


        GoogleClientSecrets clientSecrets = new GoogleClientSecrets();
        GoogleClientSecrets.Details details = new GoogleClientSecrets.Details();
        details.setClientId("############");
        details.setClientSecret("###################");
        clientSecrets.setInstalled(details);


        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

        List<String> scopes = Arrays.asList("https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile", "openid");

        // 创建验证流程对象
        GoogleAuthorizationCodeFlow googleAuthorizationCodeFlow = new GoogleAuthorizationCodeFlow
                .Builder(httpTransport, jsonFactory, clientSecrets, scopes)
                // AccessType为离线offline,才能获得Refresh Token
                .setAccessType("offline").build();
        // 返回跳转登录请求
        String uri = googleAuthorizationCodeFlow.newAuthorizationUrl().setRedirectUri("http://localhost:8080/code").build();


        System.out.println(uri);

    }

在这里插入图片描述
在这里插入图片描述

3.4 根据授权码获取用户信息


    public static void main(String[] args) throws GeneralSecurityException, IOException {

        GoogleClientSecrets clientSecrets = new GoogleClientSecrets();
        GoogleClientSecrets.Details details = new GoogleClientSecrets.Details();
        details.setClientId("########################");
        details.setClientSecret("############");
        clientSecrets.setInstalled(details);


        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
        // 创建验证流程对象

        List<String> scopes = Arrays.asList("https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile", "openid");

        GoogleAuthorizationCodeFlow googleAuthorizationCodeFlow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, clientSecrets, scopes)
                // AccessType为离线offline,才能获得Refresh Token
                .setAccessType("offline").build();

        GoogleAuthorizationCodeTokenRequest tokenRequest = googleAuthorizationCodeFlow.newTokenRequest("4/0AX4XfWh225UarpB-nVkCbOdx5kbPvhjHOlN9t2UgEi2ljlw_QWiaPGLOxx6tzyMI8Ac1rA");
        tokenRequest.setRedirectUri("http://localhost:8080/code");
        tokenRequest.setGrantType("authorization_code");
        GoogleTokenResponse tokenResponse = tokenRequest.execute();
        String token = tokenResponse.getAccessToken();

        if (StringUtils.isNotBlank(tokenResponse.getIdToken())) {
            GoogleIdTokenVerifier idTokenVerifier = new GoogleIdTokenVerifier.Builder(googleAuthorizationCodeFlow.getTransport(), googleAuthorizationCodeFlow.getJsonFactory()).build();
            idTokenVerifier.verify(tokenResponse.getIdToken());
            GoogleIdToken googleIdToken = idTokenVerifier.verify(tokenResponse.getIdToken());
            if (googleIdToken != null && googleIdToken.getPayload() != null) {
                googleIdToken.getPayload().getEmail();

                System.out.println(googleIdToken.getPayload().toString());

            }
        }


    }

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值