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