.NET 项目集成 OAuth2 登录最全面的、最方便的框架
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
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"}}
}
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);}}
}
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",};}
}
特别贡献
Carl
Donma Hsu[7]
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 登录最全面的、最方便的框架相关推荐
- java项目集成谷歌登录验证器,给网站添加谷歌验证(我不是机器人)
1.去谷歌网站.(如果没有谷歌gmail,也许还要注册gmail并登陆) 2.注册要验证的网站. Label中随意填写个标签. 'Choose the type of reCAPTCHA'中选择验证类 ...
- 最全面的Unity游戏开发指南视频教程 第2卷
最全面的Unity游戏开发指南视频教程 第2卷 流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小 ...
- SpringBoot项目中集成第三方登录功能
SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...
- 最全面的iOS和Mac开源项目和第三方库汇总
标签: UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UIT ...
- 最全面的C#开源项目介绍
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
- Android项目集成谷歌账户登录
在做国外项目的时候,许多需要集成谷歌账户登录功能. 集成谷歌登录后,能直接调用谷歌的账户登录界面进行登录操作(包括注册新用户.忘记密码等),同时会把账户信息保存到设备的account manager中 ...
- 12-SpringSecurity:通过OAuth2集成Github登录
背景 本系列教程,是作为团队内部的培训资料准备的.主要以实验的方式来体验 SpringSecurity 的各项Feature. 目前 SpringSecurity 新版本已实现了对 OAuth2.0 ...
- 如何使用okta作为认证方配置Spring Boot 2 Security5集成的OAuth2登录到我们自己的工程项目------范例3
本篇范例在范例2的基础上持续集成扩展 注册账号的地址如下: https://developer.okta.com/signup/ 注册成功要求你用临时密码(发送到你邮箱的)激活你的注册账号 此网站会分 ...
- Spring Boot 快速集成第三方登录功能
Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...
最新文章
- Python之列表list转换成字典dict的的方法【使用内置函数zip和dict快速搞定】
- 微软翻译突破百种语言和方言大关
- tomcat7在eclipse中,调试时断点频繁停在threadpoolexecutor
- turbo c图形方式下编程小技巧
- 全球及中国昆虫类宠物食品行业竞争潜力与盈利价值分析报告2022版
- Git学习笔记—Git Flow
- 高吞吐、低延迟 Java 应用的 GC 优化实践
- 一个基础的 HTML 文档有哪些标签?(3)
- 快速幂实现pow函数(从二分和二进制两种角度理解快速幂)
- linux alsa声卡命令,Linux ALSA声卡驱动之一:ALSA架构简介
- 系统调用----sandir
- 四级重点高频词汇表_零基础,教你裸过英语四级!这些方法请收藏
- url伪静态、url重写
- php框架laravel下载,Laravel框架下载,安装及路由操作图文详解
- word之无法插入公式,公式图标灰色
- Testin 云测:一个典型的产业互联网创业样本
- Android Studio:基本UI界面设计 (详细)
- linux windows C++开发差异
- Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
- 荣达嵌入式打印机打印效果
热门文章
- php页面如何加入滚动广告,前端页面内实现左右摇摆广告
- TMS320F28335外部中断总结
- 脸部画法:如何设计人物?人物的脸部怎么画?
- 随手一写就是一个侧滑关闭activity
- 如何使用计算机控制赤道仪,赤道仪及经纬仪的知识和使用方法
- javascript UTF-8的繁体与简体转换
- ui设计稿psd文件,前端怎么抠图,怎么高度还原ui稿-- pxcook像素大厨,
- Class^=,Class*= ,Class$=含义(转)
- nextcloud配置mysql_nextcloud的安装配置
- c语言中int什么意思以及什么是无符号和有符号整型