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

打印 上一主题 下一主题

主题 529|帖子 529|积分 1587

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

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

1、创建应用

打开gitee个人中央->第三方应用->创建应用
创建应用后在我的应用界面,查看已创建应用的Client ID和Client Secret
2、对接

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

  • 1、回调地址
根据协议,我们必须设置一个回调地址,来接收认证中央反馈给我们的信息,由于我是使用了vue+.net前后端分离的架构。所以需要再vue项目中创建一个页面,设置路由,并放开访问权限,这个页面的主要作用是为了让用户感知授权过程、授权乐成后,回调页面会接收到state和code并转发给callback接口,页面显示授权乐成,并随后关闭页面
  1. {
  2.     path: "/oauth-callback",
  3.     name: "Callback",
  4.     component: () => import("@/views/login/Callback.vue"),
  5.     meta: {
  6.       title: "认证中心回调页面",
  7.       showLink: false,
  8.       rank: 101
  9.     }
  10.   }
复制代码

  • 2、callback接口
接收由步骤1传递过来的参数,并根据规则解析state,根据code参数,调用官方提供的api获取token,当拿到token后,就可以调用其他api了,也可以对token进行保存等其他操纵。
  1. var giteeTokenResult = await "https://gitee.com/oauth/token"
  2.     .SetQueryParams(new { grant_type = "authorization_code", code = input.Code, client_id = authorizationCenter.ClientId, redirect_uri = authorizationCenter.RedirectUri, client_secret = authorizationCenter.ClientSecret })
  3.     .PostAsync()
  4.     .ReceiveJson<GiteeTokenResult>();
复制代码
我们这里调用了获取用户信息的接口,根据反馈的用户信息,去后面的逻辑
  1. oAuth2UserInfo = await "https://gitee.com/api/v5/user"
  2.     .WithHeader("User-Agent", "purest-admin")
  3.     .SetQueryParams(new { access_token = giteeTokenResult.AccessToken })
  4.     .GetJsonAsync<OAuth2UserInfo>();
  5. oAuth2UserInfo.Type = OAuth2TypeConst.GITEE;
复制代码

  • 3 用户注册以及绑定
当检测到系统中存在此认证用户后,检查是否有绑定本项目的用户,如果有直接返回token。登录到首页,如果没有则去绑定或注册
  1.   var oAuth2User = await _oAuth2UserManager.GetOAuth2UserPersistenceIdAsync(oAuth2UserInfo);
  2.   if (oAuth2User.UserId.HasValue)
  3.   {
  4.       var (accessToken, userInfo) = await GetTokenAndUserInfoAsync(oAuth2User.UserId.Value);
  5.       await _hubContext.Clients.Client(stateInfo.ConnectionId).NoticeRedirect(accessToken, userInfo);
  6.   }
  7.   else
  8.       await _hubContext.Clients.Client(stateInfo.ConnectionId).NoticeRegister(oAuth2User.PersistenceId);
复制代码
3、测试


4、总结

gitee接入没遇到什么特殊的问题,按部就班就完成了。接口如果调用异常,基本都是因为访问权限的问题,酌情处理吧
最后附上项目地址,如果您觉得还行,麻烦给个star吧。您的鼓励是我坚持更新的动力!
gitee:https://gitee.com/dymproject/purest-admin
github: https://github.com/dymproject/purest-admin

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表