OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
OAuth2.0授權驗證-gitee授權碼模式
本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖
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、測試
4、總結
gitee接入沒遇到什麼特別的問題,按部就班就完成了。介面如果調用異常,基本都是因為訪問許可權的問題,酌情處理吧
最後附上項目地址,如果您覺得還行,麻煩給個star吧。您的鼓勵是我堅持更新的動力!
gitee:https://gitee.com/dymproject/purest-admin
github: https://github.com/dymproject/purest-admin