MrHuo.OAuth

是 .NET 项目集成 OAuth2 登录最全面的、最方便的框架

.NET Core 项目或 .NET Framework 4.6 项目均可使用

体验网址:https://oauthlogin.net/[1]


已支持平台

  • [x] 百度(可用)

  • [x] 微信公众号(可用)

  • [x] Gitlab(可用)

  • [x] Gitee(可用)

  • [x] Github(可用)

  • [x] 华为(可用)

  • [x] Coding.net(可用)

  • [x] 新浪微博(可用)

  • [x] 支付宝(可用)

  • [x] OSChina(可用)

  • [x] 迅雷(可用)

  • [x] 钉钉内登录(可用)

  • [x] 钉钉扫码登录(可用)

  • [x] QQ(可用)

  • [x] 微软(可用)

  • [x] 小米(可用)

  • [x] StackOverflow(可用)

  • [x] Facebook(可用) by Donma Hsu[2]

  • [x] Google(可用)

  • [x] LinkedIn(可用,待发布 nuget)

  • [x] 抖音(可用,待发布 nuget) by feng lui[3]

  • [x] 快手(可用,待发布 nuget) by feng lui[4]

  • [ ] 微信开放平台(待测试)

  • [ ] 美团(待测试)

计划

  • 飞书

  • 淘宝

  • 西瓜

  • 今日头条

  • 人人网

  • Teambition

  • Pinterest

  • Twitter

  • 企业微信二维码登录

  • 企业微信网页登录

  • 酷家乐

  • 饿了么

  • 京东

  • 阿里云

  • 喜马拉雅...

使用方法

新建项目web项目,安装 nuget 包即可使用。

现可用的 nuget 包列表如下:

https://www.nuget.org/packages?q=MrHuo.OAuth[5]

Gitlab

Install-Package MrHuo.OAuth.Gitlab -Version 1.1.1

微信公众号

Install-Package MrHuo.OAuth.Wechat -Version 1.1.1

oschina.net

Install-Package MrHuo.OAuth.OSChina -Version 1.1.1

coding.net

Install-Package MrHuo.OAuth.Coding -Version 1.1.1

github.com

Install-Package MrHuo.OAuth.Github -Version 1.1.1

alipay.com

Install-Package MrHuo.OAuth.Alipay -Version 1.1.1

baidu.com

Install-Package MrHuo.OAuth.Baidu -Version 1.1.1

huawei.com

Install-Package MrHuo.OAuth.Huawei -Version 1.1.1

gitee.com

Install-Package MrHuo.OAuth.Gitee -Version 1.1.1

weibo.com

Install-Package MrHuo.OAuth.SinaWeibo -Version 1.1.1

xunlei.com

Install-Package MrHuo.OAuth.XunLei -Version 1.1.1

qq.com

Install-Package MrHuo.OAuth.QQ -Version 1.1.1

microsoft.com

Install-Package MrHuo.OAuth.Microsoft -Version 1.1.1

mi.com

Install-Package MrHuo.OAuth.Mi -Version 1.1.1

stackoverflow.com

Install-Package MrHuo.OAuth.StackOverflow -Version 1.1.1

facebook.com

Install-Package MrHuo.OAuth.Facebook -Version 1.1.1

google.com

Install-Package MrHuo.OAuth.Google -Version 1.0.0
  1. Startup.cs

public void ConfigureServices(IServiceCollection services)
{//将第三方登录组件注入进去services.AddSingleton(new Baidu.BaiduOAuth(OAuthConfig.LoadFrom(Configuration, "oauth:baidu")));services.AddSingleton(new Wechat.WechatOAuth(OAuthConfig.LoadFrom(Configuration, "oauth:wechat")));services.AddSingleton(new Gitlab.GitlabOAuth(OAuthConfig.LoadFrom(Configuration, "oauth:gitlab")));services.AddSingleton(new Gitee.GiteeOAuth(OAuthConfig.LoadFrom(Configuration, "oauth:gitee")));//... 其他登录方式
}

注意:如果用 appsettings.json 方式引入,提供了一个快捷方法从配置中加载。

OAuthConfig.LoadFrom(Configuration, "oauth:baidu")

"oauth:baidu" 这部分是配置前缀,配置格式如下:

{"oauth": {"qq": {"app_id": "qq_app_id","app_key": "qq_app_key","redirect_uri": "https://oauthlogin.net/oauth/qqcallback","scope": "get_user_info"},"github": {"app_id": "github_app_id","app_key": "github_app_key","redirect_uri": "https://oauthlogin.net/oauth/githubcallback","scope": "repo"},"wechat": {"app_id": "wechat_app_id","app_key": "wechat_app_key","redirect_uri": "https://oauthlogin.net/oauth/wechatcallback","scope": "snsapi_userinfo"},"huawei": {"app_id": "huawei_app_id","app_key": "huawei_app_key","redirect_uri": "https://oauthlogin.net/oauth/huaweicallback","scope": "https://www.huawei.com/auth/account"},"gitee": {"app_id": "gitee_app_id","app_key": "gitee_app_key","redirect_uri": "http://oauthlogin.net/oauth/giteecallback","scope": "user_info"},"baidu": {"app_id": "baidu_app_id","app_key": "baidu_app_key","redirect_uri": "http://oauthlogin.net/oauth/baiducallback","scope": "basic"},"alipay": {"app_id": "alipay_app_id","app_key": "alipay_app_key","redirect_uri": "https://oauthlogin.net/oauth/alipaycallback","scope": "auth_user","private_key": "private_key","public_key": "public_key"},"gitlab": {"app_id": "gitlab_app_id","app_key": "gitlab_app_key","redirect_uri": "http://oauthlogin.net/oauth/gitlabcallback","scope": "read_user"}}
}
  1. OAuthController.cs 根据实际需要自行命名

public class OAuthController : Controller
{[HttpGet("oauth/{type}")]public IActionResult Index(string type,[FromServices] BaiduOAuth baiduOAuth,[FromServices] WechatOAuth wechatOAuth){var redirectUrl = "";switch (type.ToLower()){case "baidu":{redirectUrl = baiduOAuth.GetAuthorizeUrl();break;}case "wechat":{redirectUrl = wechatOAuth.GetAuthorizeUrl();break;}default:return ReturnToError($"没有实现【{type}】登录方式!");}return Redirect(redirectUrl);}[HttpGet("oauth/{type}callback")]public async Task<IActionResult> LoginCallback(string type,[FromServices] BaiduOAuth baiduOAuth,[FromServices] WechatOAuth wechatOAuth,[FromQuery] string code,[FromQuery] string state){try{switch (type.ToLower()){case "baidu":{var authorizeResult = await baiduOAuth.AuthorizeCallback(code, state);if (!authorizeResult.IsSccess){throw new Exception(authorizeResult.ErrorMessage);}return Json(authorizeResult);}case "wechat":{var authorizeResult = await wechatOAuth.AuthorizeCallback(code, state);if (!authorizeResult.IsSccess){throw new Exception(authorizeResult.ErrorMessage);}return Json(authorizeResult);}default:throw new Exception($"没有实现【{type}】登录回调!");}}catch (Exception ex){return Content(ex.Message);}}
}
  1. Views

<!--在代码中放置授权按钮-->
<a href="/oauth/baidu">Baidu 登录</a>
<a href="/oauth/wechat">Wechat 扫码登录</a>
<!-- //其他登录方式照样子往下写 -->

扩展

扩展其他平台非常容易,拿 Gitee 平台的代码来说:https://github.com/mrhuo/MrHuo.OAuth/tree/main/MrHuo.OAuth.Gitee[6]

第一步:找平台对应 OAuth 文档,找到获取用户信息接口返回JSON,转换为 C# 实体类。如下:

根据自己需要和接口标准,扩展用户属性

public class GiteeUserModel : IUserInfoModel
{[JsonPropertyName("name")]public string Name { get; set; }[JsonPropertyName("avatar_url")]public string Avatar { get; set; }[JsonPropertyName("message")]public string ErrorMessage { get; set; }[JsonPropertyName("email")]public string Email { get; set; }[JsonPropertyName("blog")]public string Blog { get; set; }//...其他属性类似如上
}

第二步:写对应平台的授权接口

/// <summary>
/// https://gitee.com/api/v5/oauth_doc#/
/// </summary>
public class GiteeOAuth : OAuthLoginBase<GiteeUserModel>
{public GiteeOAuth(OAuthConfig oauthConfig) : base(oauthConfig) { }protected override string AuthorizeUrl => "https://gitee.com/oauth/authorize";protected override string AccessTokenUrl => "https://gitee.com/oauth/token";protected override string UserInfoUrl => "https://gitee.com/api/v5/user";
}

加上注释,总共十行,如你所见,非常方便。如果该平台协议遵循 OAuth2 标准开发,那么就这么几行就好了。

就连修改字段的微信登录实现,也不过复杂,只需要定义基本参数就OK。代码如下:

/// <summary>
/// Wechat OAuth 相关文档参考:
/// <para>https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html</para>
/// </summary>
public class WechatOAuth : OAuthLoginBase<WechatAccessTokenModel, WechatUserInfoModel>
{public WechatOAuth(OAuthConfig oauthConfig) : base(oauthConfig) { }protected override string AuthorizeUrl => "https://open.weixin.qq.com/connect/oauth2/authorize";protected override string AccessTokenUrl => "https://api.weixin.qq.com/sns/oauth2/access_token";protected override string UserInfoUrl => "https://api.weixin.qq.com/sns/userinfo";protected override Dictionary<string, string> BuildAuthorizeParams(string state){return new Dictionary<string, string>(){["response_type"] = "code",["appid"] = oauthConfig.AppId,["redirect_uri"] = System.Web.HttpUtility.UrlEncode(oauthConfig.RedirectUri),["scope"] = oauthConfig.Scope,["state"] = state};}public override string GetAuthorizeUrl(string state = ""){return $"{base.GetAuthorizeUrl(state)}#wechat_redirect";}protected override Dictionary<string, string> BuildGetAccessTokenParams(Dictionary<string, string> authorizeCallbackParams){return new Dictionary<string, string>(){["grant_type"] = "authorization_code",["appid"] = $"{oauthConfig.AppId}",["secret"] = $"{oauthConfig.AppKey}",["code"] = $"{authorizeCallbackParams["code"]}"};}protected override Dictionary<string, string> BuildGetUserInfoParams(WechatAccessTokenModel accessTokenModel){return new Dictionary<string, string>(){["access_token"] = accessTokenModel.AccessToken,["openid"] = accessTokenModel.OpenId,["lang"] = "zh_CN",};}
}

特别贡献

  1. Carl

  2. Donma Hsu[7]

  3. feng lui[8]


为了能让各位朋友能顺利的使用各种平台登录组件,先急求各种平台的 APPID 做测试,有这方面资源的朋友联系我。提供测试的朋友,可以永久出现在项目首页特别贡献列表里,可带链接。

邮件:admin@mrhuo.com 备注:OAuth Appid

Contribution

1.欢迎参与开发,贡献其他未完成平台代码。2.欢迎在 issue 里提交需求平台,带上平台链接地址,我们将加入到计划之中。3.欢迎提交各种建议,文明交流。

License

Apache-2.0 License

项目地址

  • 框架名:MrHuo.OAuth

  • 作者:mrhuo

  • Github:https://github.com/mrhuo/MrHuo.OAuth[9]

MrHuo.OAuth

参考资料

[1]

https://oauthlogin.net/: https://oauthlogin.net/

[2]

x] Facebook(可用) by [Donma Hsu: https://github.com/donma

[3]

x] 抖音(可用,待发布 nuget) by [feng lui: https://github.com/fenglui

[4]

x] 快手(可用,待发布 nuget) by [feng lui: https://github.com/fenglui

[5]

https://www.nuget.org/packages?q=MrHuo.OAuth: https://www.nuget.org/packages?q=MrHuo.OAuth

[6]

https://github.com/mrhuo/MrHuo.OAuth/tree/main/MrHuo.OAuth.Gitee: https://github.com/mrhuo/MrHuo.OAuth/tree/main/MrHuo.OAuth.Gitee

[7]

Donma Hsu: https://github.com/donma

[8]

feng lui: https://github.com/fenglui

[9]

https://github.com/mrhuo/MrHuo.OAuth: https://github.com/mrhuo/MrHuo.OAuth

.NET 项目集成 OAuth2 登录最全面的、最方便的框架相关推荐

  1. java项目集成谷歌登录验证器,给网站添加谷歌验证(我不是机器人)

    1.去谷歌网站.(如果没有谷歌gmail,也许还要注册gmail并登陆) 2.注册要验证的网站. Label中随意填写个标签. 'Choose the type of reCAPTCHA'中选择验证类 ...

  2. 最全面的Unity游戏开发指南视频教程 第2卷

    最全面的Unity游戏开发指南视频教程 第2卷 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小 ...

  3. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  4. 最全面的iOS和Mac开源项目和第三方库汇总

    标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...

  5. 最全面的C#开源项目介绍

    一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...

  6. Android项目集成谷歌账户登录

    在做国外项目的时候,许多需要集成谷歌账户登录功能. 集成谷歌登录后,能直接调用谷歌的账户登录界面进行登录操作(包括注册新用户.忘记密码等),同时会把账户信息保存到设备的account manager中 ...

  7. 12-SpringSecurity:通过OAuth2集成Github登录

    背景 本系列教程,是作为团队内部的培训资料准备的.主要以实验的方式来体验 SpringSecurity 的各项Feature. 目前 SpringSecurity 新版本已实现了对 OAuth2.0 ...

  8. 如何使用okta作为认证方配置Spring Boot 2 Security5集成的OAuth2登录到我们自己的工程项目------范例3

    本篇范例在范例2的基础上持续集成扩展 注册账号的地址如下: https://developer.okta.com/signup/ 注册成功要求你用临时密码(发送到你邮箱的)激活你的注册账号 此网站会分 ...

  9. Spring Boot 快速集成第三方登录功能

    Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...

最新文章

  1. Python之列表list转换成字典dict的的方法【使用内置函数zip和dict快速搞定】
  2. 微软翻译突破百种语言和方言大关
  3. tomcat7在eclipse中,调试时断点频繁停在threadpoolexecutor
  4. turbo c图形方式下编程小技巧
  5. 全球及中国昆虫类宠物食品行业竞争潜力与盈利价值分析报告2022版
  6. Git学习笔记—Git Flow
  7. 高吞吐、低延迟 Java 应用的 GC 优化实践
  8. 一个基础的 HTML 文档有哪些标签?(3)
  9. 快速幂实现pow函数(从二分和二进制两种角度理解快速幂)
  10. linux alsa声卡命令,Linux ALSA声卡驱动之一:ALSA架构简介
  11. 系统调用----sandir
  12. 四级重点高频词汇表_零基础,教你裸过英语四级!这些方法请收藏
  13. url伪静态、url重写
  14. php框架laravel下载,Laravel框架下载,安装及路由操作图文详解
  15. word之无法插入公式,公式图标灰色
  16. Testin 云测:一个典型的产业互联网创业样本
  17. Android Studio:基本UI界面设计 (详细)
  18. linux windows C++开发差异
  19. Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
  20. 荣达嵌入式打印机打印效果

热门文章

  1. php页面如何加入滚动广告,前端页面内实现左右摇摆广告
  2. TMS320F28335外部中断总结
  3. 脸部画法:如何设计人物?人物的脸部怎么画?
  4. 随手一写就是一个侧滑关闭activity
  5. 如何使用计算机控制赤道仪,赤道仪及经纬仪的知识和使用方法
  6. javascript UTF-8的繁体与简体转换
  7. ui设计稿psd文件,前端怎么抠图,怎么高度还原ui稿-- pxcook像素大厨,
  8. Class^=,Class*= ,Class$=含义(转)
  9. nextcloud配置mysql_nextcloud的安装配置
  10. c语言中int什么意思以及什么是无符号和有符号整型