首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

OAuth2.0授权-gitee授权码模式

编程知识
2024年09月19日 13:14

OAuth2.0授权验证-gitee授权码模式

本文主要介绍如何笔者自己是如何使用gitee提供的OAuth2.0协议完成授权验证并登录到自己的系统,完整模式如图
image

1、创建应用

打开gitee个人中心->第三方应用->创建应用

创建应用后在我的应用界面,查看已创建应用的Client ID和Client Secret

2、对接

如何对接呢?gitee提供了开放文档,打开任意一个gitee页面,到页脚部分,找到OpenAPI,这里就是gitee提供的开放文档了,下面开始根据文档进行对接

  • 1、回调地址

根据协议,我们必须设置一个回调地址,来接收认证中心反馈给我们的信息,由于我是使用了vue+.net前后端分离的架构。所以需要再vue项目中创建一个页面,配置路由,并放开访问权限,这个页面的主要作用是为了让用户感知授权过程、授权成功后,回调页面会接收到state和code并转发给callback接口,页面显示授权成功,并随后关闭页面

{
    path: "/oauth-callback",
    name: "Callback",
    component: () => import("@/views/login/Callback.vue"),
    meta: {
      title: "认证中心回调页面",
      showLink: false,
      rank: 101
    }
  }
  • 2、callback接口

接收由步骤1传递过来的参数,并根据规则解析state,根据code参数,调用官方提供的api获取token,当拿到token后,就可以调用其他api了,也可以对token进行保存等其他操作。

var giteeTokenResult = await "https://gitee.com/oauth/token"
    .SetQueryParams(new { grant_type = "authorization_code", code = input.Code, client_id = authorizationCenter.ClientId, redirect_uri = authorizationCenter.RedirectUri, client_secret = authorizationCenter.ClientSecret })
    .PostAsync()
    .ReceiveJson<GiteeTokenResult>();

我们这里调用了获取用户信息的接口,根据反馈的用户信息,去后面的逻辑

oAuth2UserInfo = await "https://gitee.com/api/v5/user"
    .WithHeader("User-Agent", "purest-admin")
    .SetQueryParams(new { access_token = giteeTokenResult.AccessToken })
    .GetJsonAsync<OAuth2UserInfo>();
oAuth2UserInfo.Type = OAuth2TypeConst.GITEE;
  • 3 用户注册以及绑定

当检测到系统中存在此认证用户后,检查是否有绑定本项目的用户,如果有直接返回token。登录到首页,如果没有则去绑定或注册

  var oAuth2User = await _oAuth2UserManager.GetOAuth2UserPersistenceIdAsync(oAuth2UserInfo);
  if (oAuth2User.UserId.HasValue)
  {
      var (accessToken, userInfo) = await GetTokenAndUserInfoAsync(oAuth2User.UserId.Value);
      await _hubContext.Clients.Client(stateInfo.ConnectionId).NoticeRedirect(accessToken, userInfo);
  }
  else
      await _hubContext.Clients.Client(stateInfo.ConnectionId).NoticeRegister(oAuth2User.PersistenceId);

3、测试

image

4、总结

gitee接入没遇到什么特别的问题,按部就班就完成了。接口如果调用异常,基本都是因为访问权限的问题,酌情处理吧

最后附上项目地址,如果您觉得还行,麻烦给个star吧。您的鼓励是我坚持更新的动力!

gitee:https://gitee.com/dymproject/purest-admin

github: https://github.com/dymproject/purest-admin

From:https://www.cnblogs.com/holyading/p/18420448
本文地址: http://www.shuzixingkong.net/article/2131
0评论
提交 加载更多评论
其他文章 C#|.net core 基础 - 值传递 vs 引用传递
文章探讨了C#中值传递与引用传递的概念及其对值类型和引用类型变量的影响。值传递创建参数副本,不影响原变量;引用传递共享内存地址,方法内修改影响原变量。特别提到string视为值类型处理,C#中ref、out等修饰符可实现引用传递。
C#|.net core 基础 - 值传递 vs 引用传递 C#|.net core 基础 - 值传递 vs 引用传递 C#|.net core 基础 - 值传递 vs 引用传递
C# + WPF 音频播放器 界面优雅,体验良好
前言 本文介绍一款使用 C# 与 WPF 开发的音频播放器,其界面简洁大方,操作体验流畅。该播放器支持多种音频格式(如 MP4、WMA、OGG、FLAC 等),并具备标记、实时歌词显示等功能。 另外,还支持换肤及多语言(中英文)切换。核心音频处理采用 FFmpeg 组件,获得了广泛认可,目前 Git
C# + WPF 音频播放器 界面优雅,体验良好 C# + WPF 音频播放器 界面优雅,体验良好 C# + WPF 音频播放器 界面优雅,体验良好
vivo 全链路多版本开发测试环境落地实践
作者:来自 vivo 互联网研发效能团队- Wang Kang 测试环境全链路多版本部署,解决多测试环境资源争抢等问题。 一、背景介绍 软件系统中全链路指的是从用户请求发起,到最终返回响应的整个过程中所涉及到的所有环节和组件。在微服务软件架构风格盛行的今天,因为微服务独立部署、松耦合等特性,往往一个
vivo 全链路多版本开发测试环境落地实践 vivo 全链路多版本开发测试环境落地实践 vivo 全链路多版本开发测试环境落地实践
升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server
详细介绍升讯威在线客服系统是如何高性能同时支持 MySQL 和 SQL Server 的,经过实践验证,可在低配服务器上无压力支持超 2000 人同时在线。
升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server 升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server 升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server
从零开始掌握Kubernetes: Pod和Deployment的幕后故事
1. 引言 在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发、部署和管理发生了翻天覆地的变化。容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级、可移植的容器中,这种方式大大提升了应用的部署效率和一致性。然而,随着应用规模的扩大和微服务数量的增加,管理
k8s 中的 Ingress 简介【k8s 系列之三】
Ingress 的重要性不言而喻,它不仅统一了集群对外访问的入口,还提供了高级路由、七层负载均衡、SSL终止等关键功能,同时支持动态配置更新、灰度发布等高级特性。下文将进行详细介绍。
k8s 中的 Ingress 简介【k8s 系列之三】 k8s 中的 Ingress 简介【k8s 系列之三】 k8s 中的 Ingress 简介【k8s 系列之三】
c语言 宏的一些深层应用(##,#,宏函数)
&quot;##&quot; 宏拼接 #define CONCATENATE(a, b) a ## b CONCATENATE(student_, 1) // 将a和b拼接起来变成一个新的变量 -&gt; student_1 #define CONS(a,b) int(a##e##b) CONS(2
分享3款开源、免费的Avalonia UI控件库
Avalonia介绍 Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这意味着开发人员可以共享他们的UI代码
分享3款开源、免费的Avalonia UI控件库 分享3款开源、免费的Avalonia UI控件库 分享3款开源、免费的Avalonia UI控件库