開發 Web 或桌面應用時,整合第三方登入最常見的方法就是 OAuth2,尤其用於串接 Google、Facebook、LINE、Azure、Auth0 等外部身份服務。需要注意的是:OAuth2 本質上是 授權(Authorization)標準,並不是身份驗證(Authentication)。
實際流程是:先取得授權,再藉由授權去交換 Token 並取回用戶身份資訊。
Bee.OAuth2 套件組包含五個套件,可協助 .NET 開發者快速、安全地整合 OAuth2,無論是在 Web 或 Windows Forms 應用程式中。
輕量化 .NET OAuth2 函式庫,支援 Google、Facebook、LINE、Azure、Auth0 等供應商的授權流程。
var options = new GoogleOAuth2Options {
ClientId = "...",
ClientSecret = "...",
RedirectUri = "http://localhost",
Scopes = { "openid", "email", "profile" }
};
var provider = new GoogleOAuth2Provider(options);
string authUrl = provider.GetAuthorizationUrl("random_state");
var options = new GoogleOAuth2Options { ... };
var client = new OAuth2Client(options);
OAuth2Manager.RegisterClient("Google", client);
OAuth2Manager.RedirectToAuthorization("Google");
var result = await OAuth2Manager.ValidateAuthorization();
builder.Services.AddSingleton<OAuth2Manager>(provider => {
var http = provider.GetRequiredService<IHttpContextAccessor>();
var options = new GoogleOAuth2Options { ... };
var client = new OAuth2Client(options, http);
var manager = new OAuth2Manager(http);
manager.RegisterClient("Google", client);
return manager;
});
public IActionResult Login() {
_oauth2Manager.RedirectToAuthorization("Google");
return new EmptyResult();
}
public async Task<IActionResult> Callback() {
var result = await _oauth2Manager.ValidateAuthorization();
...
}
var options = new GoogleOAuth2Options { ... };
var client = new OAuth2Client(options) {
Caption = "Google Login",
Width = 600,
Height = 800
};
OAuth2Manager.RegisterClient("Google", client);
var result = await OAuth2Manager.Login("Google");
var options = new GoogleOAuth2Options { ... };
var client = new OAuth2Client(options) {
Caption = "Google Login",
Width = 600,
Height = 800
};
OAuth2Manager.RegisterClient("Google", client);
var result = await OAuth2Manager.Login("Google");
在 OAuth2 驗證流程中,state
參數主要用來防止 CSRF 攻擊。
Bee.OAuth2 套件內建 AES-CBC + HMAC 的 state
加密機制:
OAUTH2_STATE_KEY
環境變數。state
僅做 Base64 編碼,不保證機密性與完整性。// 產生 Base64 格式的金鑰
var key = Bee.Base.AesCbcHmacKeyGenerator.GenerateCombinedKey();
Console.WriteLine(Convert.ToBase64String(key));
若系統採用 前後端分離架構,建議的流程是:
前端僅負責向 Provider 取得授權碼 (Authorization Code),後端再利用授權碼換取 Token 並取得用戶身份。
這樣可以避免 Client Secret 暴露於前端,並讓身份管理集中於後端,確保安全性與一致性。
前端 (Browser / App)
後端 (API Server)
系統內部
於 Bee.OAuth2.WinForms
與 Bee.OAuth2.Desktop
套件中,OAuth2Client
提供兩個方法:
方法 | 功能 | 適用情境 |
---|---|---|
Authorization() | 僅取得授權碼 (Authorization Code)。 | 前後端分離:前端將授權碼交給後端換取 Token 與身份。 |
Login() | 直接交換 Token 並回傳用戶身份 (AuthorizationResult )。 |
桌面應用或單機情境,需立即取得身份。 |
套件名稱 | 目標框架 | 適用場景 | NuGet 連結 |
---|---|---|---|
Bee.OAuth2 | .NET Standard 2.0 | 核心程式庫、後端服務 | NuGet |
Bee.OAuth2.AspNet | .NET Framework 4.8 | ASP.NET WebForm/MVC | NuGet |
Bee.OAuth2.AspNetCore | .NET 8+ | ASP.NET Core API/MVC | NuGet |
Bee.OAuth2.WinForms | .NET Framework 4.8 | Windows Forms 應用 | NuGet |
Bee.OAuth2.Desktop | .NET 8+ | Windows Forms 應用 | NuGet |
📢 歡迎轉載,請註明出處
📬 歡迎追蹤我的技術筆記與實戰經驗分享
Facebook | HackMD | GitHub | NuGet