LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#.NET開源最全的第三方登錄整合庫(kù) - CollectiveOAuth

admin
2023年9月5日 10:6 本文熱度 676

前言

我相信很多同學(xué)都對(duì)接過(guò)各種各樣的第三方平臺(tái)的登錄授權(quán)獲取用戶信息(如:微信登錄、支付寶登錄、GitHub登錄等等)。今天給大家推薦一個(gè).NET開源最全的第三方登錄整合庫(kù):CollectiveOAuth。

官方項(xiàng)目介紹

.Net平臺(tái)(C#) 史上最全的整合第三方登錄的開源庫(kù) => 環(huán)境支持 .NET Framework 4.5 ~ 4.6.2 和 .NetCore 3.1。目前已包含Github、Gitee、釘釘、百度、支付寶、微信、企業(yè)微信、騰訊云開發(fā)者平臺(tái)(Coding)、OSChina、微博、QQ、Google、Facebook、抖音、領(lǐng)英、小米、微軟、今日頭條、Teambition、StackOverflow、Pinterest、人人、華為、酷家樂(lè)、Gitlab、美團(tuán)、餓了么、等第三方平臺(tái)的授權(quán)登錄。

項(xiàng)目特點(diǎn)

  • 全:已集成二十多家第三方平臺(tái)(國(guó)內(nèi)外常用的基本都已包含),仍然還在持續(xù)擴(kuò)展中!
  • 簡(jiǎn):API就是奔著最簡(jiǎn)單去設(shè)計(jì)的(見后面快速開始),盡量讓您用起來(lái)沒有障礙感!

企業(yè)微信掃碼授權(quán)快速開始

0、企業(yè)微信開發(fā)對(duì)接文檔

文檔介紹

企業(yè)微信掃碼授權(quán)登錄官方文檔地址:https://developer.work.weixin.qq.com/document/path/91025,在進(jìn)行企業(yè)微信掃碼授權(quán)綁定/登錄之前需要先自建應(yīng)用,同時(shí)需要開啟網(wǎng)頁(yè)授權(quán)登錄,具體自建應(yīng)用的相關(guān)操作可以參考博文:https://developer.aliyun.com/article/1136114

管理平臺(tái)接入

完成了上面企業(yè)微信管理后臺(tái)的相關(guān)配置之后,我們就可以按照文檔步驟開始操作了

構(gòu)造二維碼

關(guān)于構(gòu)造企業(yè)微信掃碼綁定/登錄二維碼一共有兩種方式:構(gòu)造獨(dú)立窗口登錄二維碼、構(gòu)造內(nèi)嵌登錄二維碼,下面簡(jiǎn)單說(shuō)一下構(gòu)造獨(dú)立窗口登錄二維碼

構(gòu)造獨(dú)立窗口登錄二維碼

構(gòu)造獨(dú)立窗口登錄二維碼,可以在頁(yè)面放置一個(gè) button 按鈕,添加點(diǎn)擊事件,在觸發(fā)點(diǎn)擊事件時(shí)訪問(wèn)連接https://open.work.weixin.qq.com/wwopen/sso/qrConnect?appid=CORPID&agentid=AGENTID&redirect_uri=REDIRECT_URI&state=STATE,效果如圖:

連接參數(shù)說(shuō)明:

1、引入依賴

下載源碼,添加Come.CollectiveOAuth類庫(kù)。

2、配置企業(yè)微信掃碼授權(quán)(appsettings.json)中配置

{
  "AppSettings": {
    //企業(yè)微信掃碼授權(quán)
    "CollectiveOAuth_WECHAT_ENTERPRISE_SCAN_ClientId""xxxxxxxxxxxxxxxxx",
    "CollectiveOAuth_WECHAT_ENTERPRISE_SCAN_AgentId""xxxxxx",
    "CollectiveOAuth_WECHAT_ENTERPRISE_SCAN_ClientSecret""xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "CollectiveOAuth_WECHAT_ENTERPRISE_SCAN_RedirectUri""https://yours.domain.com/oauth2/callback?authSource=WECHAT_ENTERPRISE_SCAN"
  },
  "Logging": {
    "LogLevel": {
      "Default""Information",
      "Microsoft""Warning",
      "Microsoft.Hosting.Lifetime""Information"
    }
  },
  "AllowedHosts""*"
}

構(gòu)建授權(quán)Url方法

        /// <summary>
        /// 構(gòu)建授權(quán)Url方法
        /// </summary>
        /// <param name="authSource"></param>
        /// <returns>RedirectUrl</returns>
        public IActionResult Authorization(string authSource= "WECHAT_ENTERPRISE_SCAN")
        {
            AuthRequestFactory authRequest = new AuthRequestFactory();
            var request = authRequest.getRequest(authSource);
            var authorize = request.authorize(AuthStateUtils.createState());
            Console.WriteLine(authorize);
            return Redirect(authorize);
        }
    public class AuthRequestFactory
    {

        #region 從Webconfig中獲取默認(rèn)配置(可以改造成從數(shù)據(jù)庫(kù)中讀取)
        public Dictionary<string, ClientConfig> _clientConfigs;

        public Dictionary<string, ClientConfig> ClientConfigs
        {
            get
            {
                if (_clientConfigs == null)
                {
                    var _defaultPrefix = "CollectiveOAuth_";
                    _clientConfigs = new Dictionary<string, ClientConfig>();

                    #region 或者默認(rèn)授權(quán)列表數(shù)據(jù)
                    var defaultAuthList = typeof(DefaultAuthSourceEnum).ToList().select(a => a.Name.ToUpper()).ToList();
                    foreach (var authSource in defaultAuthList)
                    {
                        var clientConfig = new ClientConfig();
                        clientConfig.clientId = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_ClientId");
                        clientConfig.clientSecret = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_ClientSecret");
                        clientConfig.redirectUri = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_RedirectUri");
                        clientConfig.alipayPublicKey = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_AlipayPublicKey");
                        clientConfig.unionId = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_unionId");
                        clientConfig.stackOverflowKey = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_StackOverflowKey");
                        clientConfig.agentId = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_AgentId");
                        clientConfig.scope = AppSettingUtils.GetStrValue($"{_defaultPrefix}{authSource}_Scope");
                        _clientConfigs.Add(authSource, clientConfig);
                    }
                    #endregion
                }
                return _clientConfigs;
            }
        }


        public ClientConfig GetClientConfig(string authSource)
        {
            if (authSource.IsNullOrWhiteSpace())
            {
                return null;
            }

            if (!ClientConfigs.ContainsKey(authSource))
            {
                return null;
            }
            else
            {
                return ClientConfigs[authSource];
            }
        } 
        #endregion

        /**
        * 返回AuthRequest對(duì)象
        *
        * @return {@link AuthRequest}
        */

        public IAuthRequest getRequest(string authSource)
        {
            // 獲取 CollectiveOAuth 中已存在的
            IAuthRequest authRequest = getDefaultRequest(authSource);
            return authRequest;
        }


        /// <summary>
        /// 獲取默認(rèn)的 Request
        /// </summary>
        /// <param name="authSource"></param>
        /// <returns>{@link AuthRequest}</returns>
        private IAuthRequest getDefaultRequest(string authSource)
        {
            ClientConfig clientConfig = GetClientConfig(authSource);
            IAuthStateCache authStateCache = new DefaultAuthStateCache();

            DefaultAuthSourceEnum authSourceEnum = GlobalAuthUtil.enumfromString<DefaultAuthSourceEnum>(authSource);

            switch (authSourceEnum)
            {

                case DefaultAuthSourceEnum.WECHAT_MP:
                    return new WeChatMpAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.WECHAT_OPEN:
                    return new WeChatOpenAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.WECHAT_ENTERPRISE:
                    return new WeChatEnterpriseAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.WECHAT_ENTERPRISE_SCAN:
                    return new WeChatEnterpriseScanAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.ALIPAY_MP:
                    return new AlipayMpAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.GITEE:
                    return new GiteeAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.GITHUB:
                    return new GithubAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.BAIDU:
                    return new BaiduAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.XIAOMI:
                    return new XiaoMiAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.DINGTALK_SCAN:
                    return new DingTalkScanAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.OSCHINA:
                    return new OschinaAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.CODING:
                    return new CodingAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.LINKEDIN:
                    return new LinkedInAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.WEIBO:
                    return new WeiboAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.QQ:
                    return new QQAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.DOUYIN:
                    return new DouyinAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.GOOGLE:
                    return new GoogleAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.FACEBOOK:
                    return new FackbookAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.MICROSOFT:
                    return new MicrosoftAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.TOUTIAO:
                    return new ToutiaoAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.TEAMBITION:
                    return new TeambitionAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.RENREN:
                    return new RenrenAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.PINTEREST:
                    return new PinterestAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.STACK_OVERFLOW:
                    return new StackOverflowAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.HUAWEI:
                    return new HuaweiAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.KUJIALE:
                    return new KujialeAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.GITLAB:
                    return new GitlabAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.MEITUAN:
                    return new MeituanAuthRequest(clientConfig, authStateCache);

                case DefaultAuthSourceEnum.ELEME:
                    return new ElemeAuthRequest(clientConfig, authStateCache);

                default:
                    return null;
            }
        }
    }

API列表

https://gitee.com/rthinking/CollectiveOAuth#api%E5%88%97%E8%A1%A8

項(xiàng)目源碼地址

更多實(shí)用功能特性歡迎前往開源地址查看👀,別忘了給項(xiàng)目一個(gè)Star💖。

https://gitee.com/rthinking/CollectiveOAuth



該文章在 2023/9/5 10:06:12 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
色多多99在线热播视频 | 一道精品一区二区三区亚洲欧洲 | 亚洲欧美人成网站在线观看看 | 在线观看日本免费a∨下 | 亚洲аv电影在线观看 | 在线视频一区二区三区在线播放 |