iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中怎么实现第三方应用登录
  • 842
分享到

Java中怎么实现第三方应用登录

2023-06-20 19:06:52 842人浏览 八月长安
摘要

这篇文章给大家介绍Java中怎么实现第三方应用登录,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是OAuth3.0OAuth是一项协议,它为用户资源的授权提供了一个安全、开放而简易的标准,OAuth的授权不会使第三

这篇文章给大家介绍Java中怎么实现第三方应用登录,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。


什么是OAuth3.0

OAuth是一项协议,它为用户资源的授权提供了一个安全、开放而简易的标准,OAuth的授权不会使第三方触及到用户的账号信息(比如密码),因此OAuth是相对安全的。而OAuth3.0就是OAuth的延续,不过2.0更加关注客户端开发者的简易性。

申请网站接入

常见的第三方应用都支持第三方登录,比如:QQ、微信、微博、GitHubgitee等,要想申请第三方登录权限,就需要去到对应的平台,比如QQ,搜索QQ开放平台:

Java中怎么实现第三方应用登录

进入应用管理,并创建应用即可:

Java中怎么实现第三方应用登录

不过对于QQ、微信、微博等的网站接入都需要身份认证,过程比较繁琐,所以我们使用Gitee作为第三方应用进行接入。

首先打开Gitee,选择设置:

Java中怎么实现第三方应用登录

在设置中选择第三方应用:

Java中怎么实现第三方应用登录

点击创建应用并填写相关信息:

Java中怎么实现第三方应用登录

应用名称可以随意填写,但是下面的两个地址就有用途了,对于应用主页,它需要填写的是当前应用的主页,而应用回调接口填写的是当登录成功后需要跳转的页面。

创建SpringBoot应用

申请完成后,就可以来创建springBoot应用,并新建一个index.html页面:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8">    <title>Title</title>  </head>  <body>    <fORM>      用户名:<input type="text"/><br/>      密码:<input type="passWord"/><br/>      <a href="">Gitee登录</a>      <input type="submit" value="登录"/><br/>    </form>  </body></html>

效果如下:

Java中怎么实现第三方应用登录

页面很丑,但不重要,实现功能即可。

现在我们的需求是点击Gitee登录链接,会跳转至一个第三方的登录页面,就像这样:

Java中怎么实现第三方应用登录

那么该如何实现呢?

回到Gitee中,在创建完应用后,将页面拖动到下方,会看到模拟请求按钮:

Java中怎么实现第三方应用登录

点击一下该按钮,会进行一个模拟登录:

Java中怎么实现第三方应用登录

地址栏中的地址就是我们需要跳转的页面,将地址复制下来:

https://gitee.com/oauth/authorize?client_id=52908197466cd3008db76a6018de66c8d222656056fa78b26dd58d1f4fa0a606&redirect_uri=Http%3A%2F%2Flocalhost%3A8080%2Fsuccess&response_type=code

里面总共有3个参数,分别是:

  • client_id

  • redirect_uri

  • response_type

其中client_id在创建完应用之后便会提供给我们:

Java中怎么实现第三方应用登录

也就是地址上的内容,而redirect_uri是在点击了同意授权按钮之后需要跳转的页面,即:登录成功之后,需要跳转至成功后的页面,最后是response_type,它表示响应类型为一个授权码。

来了解一下授权码的作用,当用户点击了同意授权按钮之后,Gitee服务器会给redirect_uri指向的页面传递一个授权码,此时就可以接收到这个授权码,再去换取AccessToken,只有获取到了AccessToken,才能够获取到Gitee中当前用户的某些信息。

点击了同意授权按钮后:

Java中怎么实现第三方应用登录

得到了授权码后,通过该地址能够换取AccessToken:

https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}

该地址要求以Post形式请求,使用PostMan测试一下,将参数按要求设置好:

Java中怎么实现第三方应用登录

得到相应结果:

{  "access_token": "cd2c33c3fe548a23188159f87da70110",  "token_type": "bearer",  "expires_in": 86400,  "refresh_token": "c95a38ab2357638ffc4dc6f09c623f2333e0930a37dec8e2f191a40d7afd3514",  "scope": "user_info",  "created_at": 1627974370}

得到了AccessToken之后,就可以获取到用户在Gitee中已经授权的任何信息了。

整个授权认证的过程如下图所示:

Java中怎么实现第三方应用登录

实现登录流程

熟悉了整合流程之后,我们用代码来实现一下,首先修改页面:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8">    <title>Title</title>  </head>  <body>    <form>      用户名:<input type="text"/><br/>      密码:<input type="password"/><br/>      <a href="https://gitee.com/oauth/authorize?client_id=52908197466cd3008db76a6018de66c8d222656056fa78b26dd58d1f4fa0a606&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fsuccess&response_type=code">Gitee登录</a>      <input type="submit" value="登录"/><br/>    </form>  </body></html>

现在超链接的地址经过修改后就能成功跳转至Gitee授权页面了,因为授权成功后跳转的地址为 http://localhost:8080/success ,所以需要来处理一下这个请求,创建一个控制器:

@Controllerpublic class LoginController {    @GetMapping("/success")    public String login(@RequestParam("code") String code){        System.out.println(code);        return "success";    }        @GetMapping("/")    public String index(){        return "index";    }}

当授权成功后我们让其跳转至success.html页面,并接收Gitee传递过来的授权码,所以创建success.html:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8">    <title>Title</title>  </head>  <body>    <h2>登录成功!</h2>  </body></html>

启动项目测试一下:

Java中怎么实现第三方应用登录

点击同意授权后确实登录成功了,控制台也输出了授权码:

e907fd92d8392ebcd72dff321da45115ff0fba2dec0e6918b233ec7d03b76e5d

其实到这里登录流程还没有结束,因为如果使用第三方应用登录的话,平台会使用第三方应用的一些信息,比如账号、头像等直接作为当前平台的登录名和头像,所以我们还需要获取用户在Gitee中的一些信息。

此处参考Gitee的api文档:

Java中怎么实现第三方应用登录

比如获取授权用户的资料信息:

Java中怎么实现第三方应用登录

它需要传递一个access_token作为参数,那我们要做的就是使用授权码去得到access_key:

@Controllerpublic class LoginController {    @GetMapping("/success")    public String login(@RequestParam("code") String code, Map<String,String> map) {        // 获取accesskey        String accessKey = getAccessKey(code);        System.out.println(accessKey);        // 通过accessKey获取用户信息        String userInfo = getUserInfo(accessKey);        // 取出用户名        String name = (String) JSONObject.parseObject(userInfo).get("name");        // 取出头像        String avatar_url = (String) jsONObject.parseObject(userInfo).get("avatar_url");        // 放入请求域        map.put("name",name);        map.put("avatar_url",avatar_url);        return "success";    }        private String getUserInfo(String accessKey) {        String json = "";        OkHttpClient client = new OkHttpClient();        // 通过该地址能够获取到用户信息        String url = "https://gitee.com/api/v5/user?access_token=" + accessKey;        Request request = new Request.Builder()                .get()                .url(url).build();        try {            Response response = client.newCall(request).execute();            json = response.body().string();        } catch (IOException e) {            e.printStackTrace();        }        return json;    }        private String getAccessKey(String code) {        OkHttpClient client = new OkHttpClient();        // 通过该地址能够获取到access_token        String url = "https://gitee.com/oauth/token";        // 封装请求参数        RequestBody requestBody = new FormBody.Builder()                .add("grant_type", "authorization_code")                .add("code", code)                .add("client_id", "52908197466cd3008db76a6018de66c8d222656056fa78b26dd58d1f4fa0a606")                .add("redirect_uri", "http://localhost:8080/success")                .add("client_secret", "7e84401a9752e88d22d5450c1687ca6a19bc34f45fe3452cefd33312d8153978")                .build();        Request request = new Request.Builder()                .post(requestBody)                .url(url).build();        String accessKey = "";        try {            Response response = client.newCall(request).execute();            String json = response.body().string();            // 获取json串中的access_token属性            accessKey = (String) JSONObject.parseObject(json).get("access_token");        } catch (IOException e) {            e.printStackTrace();        }        return accessKey;    }    @GetMapping("/")    public String index() {        return "index";    }}

success.html页面需要显示用户信息:

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8">    <title>Title</title>  </head>  <body>    <h2>登录成功!</h2>    <h2>用户名:<span th:text="${#request.getAttribute('name')}"></span></h2>    <img th:src="${#request.getAttribute('avatar_url')}">  </body></html>

效果如下:

Java中怎么实现第三方应用登录

事实上,登录流程远没有这么简单,当用户取消授权时就不能让其登录,程序里还没有加上这类判断,对于从未注册过的用户来说,这次登录就相当于一次注册,所以还需要以Gitee中用户的某些信息作为注册信息进行登录,当已经注册过的用户使用第三方登录时,要让其正常登录。

关于Java中怎么实现第三方应用登录就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java中怎么实现第三方应用登录

本文链接: https://www.lsjlt.com/news/299646.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中怎么实现第三方应用登录
    这篇文章给大家介绍Java中怎么实现第三方应用登录,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是OAuth3.0OAuth是一项协议,它为用户资源的授权提供了一个安全、开放而简易的标准,OAuth的授权不会使第三...
    99+
    2023-06-20
  • Android中怎么实现第三方QQ登录
    本篇文章给大家分享的是有关Android中怎么实现第三方QQ登录,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。第三方登录之QQ代码区public class ...
    99+
    2023-05-30
    android
  • 手把手教你实现Java第三方应用登录
    目录什么是OAuth2.0申请网站接入创建SpringBoot应用实现登录流程大家在自己做项目的时候有没有想过实现一个第三方应用登录呢?类似这种: 本篇文章就来聊一聊该如何实现...
    99+
    2022-11-12
  • web实现QQ第三方登录
    要实现QQ第三方登录,可以按照以下步骤进行:1. 注册QQ互联开发者账号:前往QQ互联开发者平台(https://connect.q...
    99+
    2023-09-23
    web
  • 实现 Google 第三方授权登录
    最近做项目要实现Google的第三方登录,这简单的记录一下。 目前Google的第三方登录有很多方案,且官方提供SDK方便接入。但是我这个项目同时要实现网页和客户端。所以选择了 Google OAuth 2.0 的方案。 当然,也可以 《...
    99+
    2023-10-07
    服务器 前端
  • 第三方网站微信登录java代码实现
    前两个星期在公司中的项目加上了微信登录、绑定的功能,在这里做个记录!一、开发前知识微信开放平台与微信公众平台的区别 1.1 微信公众平台:   ① 地址:https://mp.weixin.qq.com/cgi-bin/loginpage&...
    99+
    2023-05-31
    java 网站 微信登录
  • Vue如何实现Google第三方登录
    这篇文章主要介绍了Vue如何实现Google第三方登录的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何实现Google第三方登录文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • node如何实现github第三方登录
    这篇文章主要介绍了node如何实现github第三方登录的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇node如何实现github第三方登录文章都会有所收获,下面我们一起来看看吧。一、详细流程二、具体流程1.注...
    99+
    2023-07-04
  • 浅析node是怎么实现github第三方登录的
    一、详细流程二、具体流程1.注册应用①登录github,Settings=>Developer settings=>OAuth Apps=>Register a new application ②填写应用信息③注册完成,得...
    99+
    2022-11-22
    nodejs​ node
  • .Net Core实现第三方QQ扫码登录
    目录效果展示:核心实现展示二维码解析扫码结果登录视图登录授权配置Cookie认证策略创建用户登录标识用户退出登录代码开源效果展示: 核心实现 展示二维码 public static...
    99+
    2022-11-13
  • 微信第三方登录Android实现代码
    记录一下微信第三方实现登录的方法。还是比较简单。 一、必要的准备工作 1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需要被审核; 2.然后到资源...
    99+
    2022-06-06
    微信第三方 Android
  • springboot网站应用使用第三方qq登录的实现过程
    使用第三方qq登录需要在QQ互联官网https://connect.qq.com/中申请成功才可以使用。 1.登录成功后进入个人设置中心设置个人信息 2.选择公司或个人接入,这里我...
    99+
    2022-11-12
  • Android实现使用微信登录第三方APP的方法
    本文实例讲述了Android实现使用微信登录第三方APP的方法。分享给大家供大家参考,具体如下: 使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不...
    99+
    2022-06-06
    方法 app Android
  • Vue实现Google第三方登录的示例代码
    目录一、开发者平台配置解决问题BUG一、开发者平台配置 1、进入开发者平台,首先前往Google API 控制台选择或者创建一个项目 谷歌开发者平台 一堆眼花缭乱的API让你...
    99+
    2022-11-12
  • Springboot整合第三方登录功能的实现示例
    springboot 项目的pom文件引入依赖 <dependency> <groupId>me.zhyd.oauth</groupId>...
    99+
    2022-11-13
  • Django之第三方平台QQ授权登录的实现
    目录环境准备创建QQ互联应用创建应用模块定义QQ登录模型类执行迁移QQLoginTool库API使用说明QQ登录扫码页面认证获取openidopenid的判断处理openid是否绑定...
    99+
    2023-05-19
    Django 第三方平台QQ授权登录 Django 授权登录
  • 浅析node怎么进行微博第三方登录
    接入微博第三方登录可以免注册,对用户的体验更好,今天我们就用nodejs实现微博第三方登录(用其它语言也可以)。【相关教程推荐:nodejs视频教程】实现效果在线实例: http://www.lolmbbs.com/login1、点击微博登...
    99+
    2022-11-22
    node nodejs​ Node.js
  • java异步调用第三方接口怎么实现
    在Java中,可以使用多线程或使用异步框架来实现异步调用第三方接口。1. 使用多线程:可以创建一个新的线程来执行第三方接口的调用操作...
    99+
    2023-10-09
    java
  • 原生java代码实现码云第三方验证登录的示例代码
    目录码云第三方验证登录一、在码云上创建应用1、在码云上注册一个账号,点击右上角设置2、创建应用3、填写资料4、获取到clientId以及client Secret二、在项目中实现第三...
    99+
    2022-11-12
  • 怎么使用Java第三方实现发送短信功能
    本文小编为大家详细介绍“怎么使用Java第三方实现发送短信功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java第三方实现发送短信功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、介绍在项目开发...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作