JoeDevSharp.Net.Extensions.OAuth2
1.0.0
See the version list below for details.
dotnet add package JoeDevSharp.Net.Extensions.OAuth2 --version 1.0.0
NuGet\Install-Package JoeDevSharp.Net.Extensions.OAuth2 -Version 1.0.0
<PackageReference Include="JoeDevSharp.Net.Extensions.OAuth2" Version="1.0.0" />
<PackageVersion Include="JoeDevSharp.Net.Extensions.OAuth2" Version="1.0.0" />
<PackageReference Include="JoeDevSharp.Net.Extensions.OAuth2" />
paket add JoeDevSharp.Net.Extensions.OAuth2 --version 1.0.0
#r "nuget: JoeDevSharp.Net.Extensions.OAuth2, 1.0.0"
#:package JoeDevSharp.Net.Extensions.OAuth2@1.0.0
#addin nuget:?package=JoeDevSharp.Net.Extensions.OAuth2&version=1.0.0
#tool nuget:?package=JoeDevSharp.Net.Extensions.OAuth2&version=1.0.0
Sure, here’s a clear and concise README in English for your OAuth2 framework:
Net.Extensions.OAuth2
Lightweight and extensible OAuth2 authentication framework for .NET, supporting multiple popular providers and enabling easy custom provider implementation.
Features
- Built-in support for Google, GitHub, Microsoft, Apple, Facebook, LinkedIn, Twitter, Keycloak.
- OAuth2 authorization code flow with PKCE and token refresh handling.
- Standardized user info mapping to
AuthUser
. - Common interface
IAuthProvider
for unified handling. - Abstract base class
CustomOAuth2Provider
to simplify custom provider creation. - Compatible with .NET 6+ and uses standard HttpClient.
Supported Providers
Basic usage example with GoogleProvider
var provider = new GoogleProvider(
clientId: "your-client-id",
clientSecret: "your-client-secret",
redirectUri: "http://localhost:60000/",
scopes: new[] { "openid", "email", "profile" }
);
var user = await provider.LoginAsync();
Console.WriteLine($"Authenticated user: {user?.Username} - {user?.Email}");
Creating a Custom Provider
To support any other provider, extend the CustomOAuth2Provider
base class and override the GetUserInfoAsync
method.
Simple example
public class MyCustomProvider : CustomOAuth2Provider
{
public MyCustomProvider(OAuth2Options options) : base(options) { }
public override async Task<AuthUser> GetUserInfoAsync(string accessToken)
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var json = await client.GetStringAsync(Options.UserInfoEndpoint);
var data = JsonDocument.Parse(json).RootElement;
return new AuthUser
{
Id = data.GetProperty("id").GetString() ?? "",
Username = data.TryGetProperty("username", out var u) ? u.GetString() ?? "" : "",
Email = data.TryGetProperty("email", out var e) ? e.GetString() ?? "" : "",
Picture = data.TryGetProperty("avatar", out var a) ? a.GetString() ?? "" : "",
Roles = new List<string>(),
Claims = data.EnumerateObject().ToDictionary(x => x.Name, x => x.Value.ToString())
};
}
}
IAuthProvider
Interface
public interface IAuthProvider
{
bool IsAuthenticated { get; }
AuthUser? CurrentUser { get; }
Task<AuthUser?> LoginAsync();
Task LogoutAsync();
}
Main Models
OAuth2Options
ClientId
ClientSecret
RedirectUri
AuthorizationEndpoint
TokenEndpoint
UserInfoEndpoint
Scopes
OAuth2Token
AccessToken
RefreshToken
Scope
TokenType
ExpiresAt
AuthUser
Id
Username
Email
Picture
Roles
Claims
Helpers
OAuth2Helper.GetCodeViaLocalServerAsync(authUrl, redirectUri)
Runs a local HTTP server to catch authorization code from redirect.OAuth2Helper.ExchangeCodeForTokenAsync(code, options)
Exchanges authorization code for OAuth2 token.
Requirements
- .NET 6 or higher
System.Text.Json
HttpClient
License
MIT — free to use and modify.
If you want, I can help prepare a GitHub repo with ready-to-use examples and tests. Want me to do that?
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Abstracts (>= 1.0.0)
- Enums (>= 1.0.0)
- Extensions (>= 1.0.0)
- Microsoft.AspNetCore (>= 2.3.0)
- Microsoft.IdentityModel.Tokens (>= 8.12.1)
- Microsoft.Web.WebView2 (>= 1.0.3296.44)
- Models (>= 1.0.0)
- System.IdentityModel.Tokens.Jwt (>= 8.12.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.