C#如何实现OAuth 2.0授权登录?集成第三方登录(如GitHub)到C#应用


答案:在ASP.NET Core中集成GitHub OAuth 2.0需先注册应用获取Client ID和Secret,再通过AspNet.Security.OAuth.GitHub包配置认证中间件,设置回调路径并请求用户权限,接着创建登录控制器触发Challenge流程,登录后利用HttpContext.AuthenticateAsync读取用户信息,并妥善处理登出;安全方面应避免硬编码凭据、使用HTTPS、依赖中间件防CSRF,实现简洁且符合标准的第三方登录。

c#如何实现oauth 2.0授权登录?集成第三方登录(如github)到c#应用

要在C#应用中实现OAuth 2.0授权登录并集成第三方服务(如GitHub),核心是通过标准的OAuth 2.0流程获取用户授权,然后换取访问令牌(Access Token)来调用API。以下是基于ASP.NET Core的完整实现步骤,以GitHub为例。

注册应用并获取凭据

在使用GitHub OAuth前,需在GitHub上注册你的应用:

  • 进入 GitHub Settings → Developer settings → OAuth Apps
  • 点击“New OAuth App”,填写应用名称、主页URL和回调地址(如:https://localhost:5001/signin-github
  • 保存后获取 Client ID 和生成 Client Secret

在ASP.NET Core中配置GitHub OAuth

使用ASP.NET Core内置的身份验证中间件可轻松集成GitHub登录。

// 1. 安装NuGet包

确保项目已安装以下包:

  • Microsoft.AspNetCore.Authentication.Google(非必须)
  • 实际只需启用通用OAuth或使用社区库,但GitHub支持可通过通用OAuth实现

推荐使用 AspNet.Security.OAuth.GitHub 社区维护的库:

dotnet add package AspNet.Security.OAuth.GitHub

// 2. 在Program.cs中配置认证服务

Program.cs 中添加身份验证配置:

var builder = WebApplication.CreateBuilder(args);
<p>// 添加认证服务
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OAuthDefaults.DisplayName;
})
.AddCookie() // 使用Cookie存储登录状态
.AddGitHub(options =>
{
options.ClientId = "your-client-id";
options.ClientSecret = "your-client-secret";
options.CallbackPath = "/signin-github"; // 与GitHub注册的回调一致</p><pre class='brush:php;toolbar:false;'>// 可选:请求额外权限(如用户邮箱)
options.Scope.Add("user:email");

});

处理登录与获取用户信息

配置完成后,通过控制器触发认证流程并读取用户信息。

6pen Art 6pen Art

AI绘画生成

6pen Art 213 查看详情 6pen Art

// 1. 创建登录入口

添加一个控制器用于发起登录:

public class AccountController : Controller
{
    public IActionResult Login(string returnUrl = "/")
    {
        var props = new AuthenticationProperties
        {
            RedirectUri = returnUrl,
            Items = { { "returnUrl", returnUrl } }
        };
        return Challenge(props, "GitHub");
    }
<pre class='brush:php;toolbar:false;'>public async Task<IActionResult> Logout()
{
    await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    return Redirect("/");
}

}

// 2. 获取用户信息

登录成功后,可在视图或控制器中访问用户信息:

@* 在Razor页面中 *@
@if (User.Identity.IsAuthenticated)
{
    <p>欢迎, @User.Identity.Name!</p>
    <form asp-controller="Account" asp-action="Logout" method="post">
        <button type="submit">登出</button>
    </form>
}
else
{
    <a asp-controller="Account" asp-action="Login">使用GitHub登录</a>
}

你也可以从认证票据中提取更多信息,例如:

var info = await HttpContext.AuthenticateAsync(OAuthDefaults.DisplayName);
if (info?.Principal != null)
{
    var name = info.Principal.FindFirst(ClaimTypes.Name)?.Value;
    var email = info.Principal.FindFirst(ClaimTypes.Email)?.Value;
    // 处理用户逻辑,如创建本地账户
}

安全与最佳实践

  • ClientSecret 存储在安全位置(如appsettings.json 或环境变量),不要硬编码
  • 启用HTTPS,OAuth回调必须通过安全连接
  • 验证返回的state参数防止CSRF攻击(中间件自动处理)
  • 根据需要映射用户信息到本地用户系统

基本上就这些。通过上述步骤,你可以让C# Web应用支持GitHub OAuth登录。整个流程遵循OAuth 2.0标准,清晰且易于维护。

以上就是C#如何实现OAuth 2.0授权登录?集成第三方登录(如GitHub)到C#应用的详细内容,更多请关注其它相关文章!


# c#  # js  # 怎么推广网站建设业务  # 厚街seo优化  # 深圳seo优化外包渠道  # 鹏翔茶业怎么营销推广  # 做360seo快  # 令牌  # 你可以  # 身份验证  # 开源  # 如何处理  # 如何使用  # 如何实现  # 回调  # 第三方  # git  # json  # go  # github  # cookie  # 编码  # app  # access  # ai  # 环境变量  # micros  # 死锁  # 湖北seo网络营销  # 王钊seo课程  # 北京网站优化价格  # 信阳网站建设方案表模板  # b端产品的seo 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: J*aScript二进制处理_ArrayBuffer与Blob  快手缓存清理方法  家里的小飞虫总是不断,用什么方法可以彻底根除?  oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法  mysql数据库索引类型有哪些_mysql索引类型解析  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  todesk如何添加信任设备_todesk信任设备设置教程  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  如何在CSS中使用absolute实现登录弹窗居中_transform translate结合  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  《小黑盒》删除历史浏览方法  电脑开不了机怎么办 电脑无法开机的解决方法  《三角洲行动》战斗步枪与机枪类改装代码分享  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  除了Copilot,还有哪些值得一试的VS Code AI插件?  使用VS Code作为你的个人知识管理系统  韩剧圈正版官网入口_韩剧圈官方指定登录  C++如何实现单例模式_C++线程安全的单例模式写法  Fedora怎么安装 Fedora Workstation安装步骤  如何使用 Optional 类型并满足 Pylint 的类型检查  J*a实现任务清单管理_集合框架综合入门练手  键盘声音异常怎么回事_键盘异响怎么处理  Python对象引用与属性赋值:理解链表中的行为  Go反射进阶:访问内嵌结构体中的被遮蔽方法  mysql如何管理数据库账户_mysql数据库账户管理技巧  我居然低估了 DeepSeek,这次更新它做到了这些!  路由器DNS怎么设置最快 优化DNS提升上网速度教程  百度竞价WAP显示PC链接问题  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  键盘保修需要什么_键盘售后维修流程  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  windows10怎么开启卓越性能_windows10电源选项代码激活  在Dash应用中自定义HTML标题和网站图标  纯CSS实现滚动时动态时间轴线条颜色填充效果  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  WooCommerce 购物车:始终显示所有交叉销售商品  ao3入口镜像地址 ao3镜像入口可靠跳转  蛙漫2(台版)正版官网 2025免费网页版分享  《七读免费小说》开通会员方法  Python定时发送QQ消息  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  163邮箱在线登录 163邮箱网页版在线入口  b站怎么用微信登录_b站微信登录方法  《绿竹漫游》关闭消息通知方法  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  Final Cut Pro视频加EQ教程  b站网页版入口 哔哩哔哩官方网站直接进入 

 2025-11-22

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.