OAuth 客户端 for C# (.NET):通过第三方服务实现授权

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

OAuth 客户端库 for C# (.NET):实现安全授权



在现代 Web 开发中,通过 OAuth 2.0 协议与外部服务(Google、GitHub、Facebook 等)集成已成为事实上的标准。对于 .NET 平台,有多个成熟的解决方案,但其中最为灵活且高效的库之一是 OAuth 客户端 for C# (.NET),可通过 NuGet 包 OAuthClient.Net 获取。该库为开发者提供了一套完整的工具,用于实现授权码流程、隐式授权和客户端凭证流程。



库的主要功能



  • 支持所有主流 OAuth 2.0 提供商 — Google、GitHub、Microsoft、Facebook、VK、Yandex 以及自定义服务器。
  • 自动令牌管理 — 获取访问令牌、刷新令牌,并在过期时自动更新。
  • 内置 CSRF 攻击防护 — 生成并验证 state 参数。
  • 异步操作 — 所有方法均支持 async/await。
  • 灵活配置 — 通过代码或 JSON 文件进行配置。
  • 可扩展性 — 可通过接口添加自定义提供商。


安装与引用



通过 NuGet 包管理器安装:



Install-Package OAuthClient.Net -Version 2.1.0


或通过 .NET CLI:



dotnet add package OAuthClient.Net --version 2.1.0


安装后,需要导入命名空间:



using OAuthClient;using OAuthClient.Models;using OAuthClient.Providers;


基本示例:通过 Google 授权



考虑一个最简单的场景——在成功授权后从 Google 获取用户数据。



public async Task<UserInfo> AuthenticateWithGoogleAsync(){    // 配置提供商    var googleProvider = new GoogleOAuthProvider(        clientId: "YOUR_GOOGLE_CLIENT_ID",        clientSecret: "YOUR_GOOGLE_CLIENT_SECRET",        redirectUri: "https://yourapp.com/oauth/callback"    );

// 创建客户端 var oauthClient = new OAuthClient(googleProvider);

// 生成用于重定向用户的 URL string authUrl = oauthClient.GetAuthorizationUrl( scope: new[] { "openid", "profile", "email" }, state: Guid.NewGuid().ToString() );

// 用户返回回调 URL 后: // 从查询参数 "code" 中提取授权码 string authorizationCode = HttpContext.Request.Query["code"];

// 用授权码交换令牌 var tokenResponse = await oauthClient.ExchangeCodeForTokenAsync(authorizationCode);

// 获取用户信息 var userInfo = await oauthClient.GetUserInfoAsync(tokenResponse.AccessToken);

return userInfo;}


使用刷新令牌



对于长期会话,库会自动管理令牌更新。保存和恢复会话的示例:



// 首次授权后保存刷新令牌string refreshToken = tokenResponse.RefreshToken;// 将其保存到数据库或安全存储中

// 恢复会话:获取新的访问令牌var newTokenResponse = await oauthClient.RefreshAccessTokenAsync(refreshToken);

// 自动更新(内置逻辑)oauthClient.TokenRefreshed += (sender, args) =>{ // 记录或保存新的刷新令牌 Console.WriteLine($"新的刷新令牌: {args.NewRefreshToken}");};


自定义 OAuth 提供商



如果需要连接到内置提供商列表中不存在的服务,该库允许创建自定义提供商:



public class CustomProvi                    

推荐