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

小老鼠
发布: 2025-11-22 14:31:02
原创
730人浏览过
答案:在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");
登录后复制

});

MarsCode
MarsCode

字节跳动旗下的免费AI编程工具

MarsCode 279
查看详情 MarsCode

处理登录与获取用户信息

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

// 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#应用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号