-
v0.3.0
Stablereleased this
2026-02-21 01:15:21 +00:00 | 3 commits to main since this releaseAdded
-
Cookie-based OAuth for Blazor — Standard cookie authentication that works with
<AuthorizeView>,[Authorize], and all built-in Blazor auth patternsAddAtProtoAuthentication()— registers OAuth service and optionsMapAtProtoOAuth()— maps/atproto/login,/atproto/callback,/atproto/logoutendpoints- Auto-generated loopback
client_idfor zero-config development - Configurable claims via
ClaimsFactoryoption - Default claims: DID, handle, PDS URL, auth method
-
Server-side AT Protocol access — Backend API integration via
IAtProtoClientFactoryAddAtProtoServer()— registers token store, client factory, and HTTP clientIAtProtoClientFactory— creates per-request authenticatedAtProtoClientfrom stored OAuth tokensIAtProtoTokenStore— interface for multi-user server-side token storageFileAtProtoTokenStore(default) — persistent file-based token storage with ASP.NET Core Data Protection encryptionInMemoryAtProtoTokenStore— volatile in-memory store for development/testingAddAtProtoServer(string tokenDirectory)overload for custom token storage directoryAtProtoTokenData— serializable token data including DPoP private key- Blazor OAuth service automatically stores/removes tokens when
IAtProtoTokenStoreis registered
-
Rewritten
LoginFormcomponent — Pure HTML form that submits to the login endpoint- Fully customizable labels for localization
- Optional PDS URL input for custom PDS connections
- Auto-displays OAuth callback errors
-
ServerIntegrationSample — New sample showing Blazor OAuth + backend AT Proto access
- Minimal API endpoints (
/api/profile,/api/timeline) - Blazor pages using
IAtProtoClientFactorydirectly - Profile and timeline views
- Minimal API endpoints (
Fixed
- DPoP nonce handling —
AtProtoClientFactorynow passesnullDPoP nonces instead of stale stored values; the XRPC client's retry logic acquires fresh nonces on first request, preventinguse_dpop_nonce401 errors
Changed
- ATProtoNet.Blazor.csproj — Replaced individual NuGet package references with
<FrameworkReference Include="Microsoft.AspNetCore.App" /> - ATProtoNet.Server
ServiceCollectionExtensions— AddedAddAtProtoServer()for OAuth-based multi-user access; default token store changed fromInMemoryAtProtoTokenStoretoFileAtProtoTokenStore; improved docs on existingAddAtProto()andAddAtProtoScoped()methods
Removed
- BREAKING:
AddAtProtoBlazor()extension method — replaced byAddAtProtoAuthentication() - BREAKING:
AtProtoAuthStateProvider— no longer needed; standardServerAuthenticationStateProviderworks via cookies - BREAKING:
OAuthCallbackcomponent — callback is now an HTTP endpoint mapped byMapAtProtoOAuth() - BREAKING:
PdsOptionmodel — PDS selection is now a simple text input inLoginForm - BREAKING:
BlazorServiceCollectionExtensionsclass — replaced byAtProtoAuthenticationExtensions
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
v0.2.0
Stablereleased this
2026-02-20 23:39:00 +00:00 | 4 commits to main since this releaseAdded
-
OAuth Authentication — Full AT Protocol OAuth implementation
- DPoP (RFC 9449) — proof-of-possession bound tokens with ES256 (P-256) key pairs
- Pushed Authorization Requests (RFC 9126) — secure authorization initiation
- PKCE (RFC 7636) — S256 code challenge for public clients
- Authorization Server Discovery — full resolution chain (Handle → DID → PDS → AS)
- Identity verification — DID/issuer consistency checks after token exchange
- Token refresh with DPoP binding
OAuthClientorchestrator withStartAuthorizationAsync()/CompleteAuthorizationAsync()AuthorizationServerDiscoveryfor handle, DID, and PDS resolutionDPoPProofGeneratorfor ES256 DPoP proof JWT generationPkceGeneratorfor PKCE S256 code verifier and challenge generation- Complete
OAuthModels— client metadata, server metadata, token responses, DID documents
-
Dynamic PDS Selection — Connect to any AT Protocol PDS at runtime
AtProtoClient.SetPdsUrl()— change PDS URL dynamicallyAtProtoClient.ApplyOAuthSessionAsync()— apply OAuth session with DPoP tokensXrpcClient.SetBaseUrl()— runtime base URL changes- OAuth flow automatically resolves user's PDS from their identity
-
Blazor OAuth Components
LoginForm— redesigned with PDS selector, OAuth toggle, custom PDS URL inputOAuthCallback— callback handler component for OAuth redirectPdsOption— model for PDS dropdown optionsAtProtoAuthStateProvider— OAuth-aware auth state withStartOAuthLoginAsync()andCompleteOAuthLoginAsync()AddAtProtoBlazor()— now registersOAuthClientwhen OAuth options are configured
-
Security hardening
- Handle format validation (SSRF prevention)
- DID:web host validation (private IP blocking)
- Redirect URI HTTPS enforcement (localhost exception for dev)
- DID format validation on token response
subclaim - Pending authorization cleanup (10-minute expiry, 100 max entries)
- DPoP private key export security documentation
-
Sample project
samples/BlazorOAuthSample— minimal Blazor Server app demonstrating OAuth login with loopback client
-
Documentation
- OAuth authentication guide (
docs/oauth.md) with loopback client development section - Updated Blazor, session management, and getting started guides
- Updated README with OAuth sections
- OAuth authentication guide (
-
Tests
- 50 new unit tests for OAuth components (DPoP, PKCE, models, dynamic PDS)
- Total: 268 unit tests
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
-
released this
2026-02-20 18:41:46 +00:00 | 8 commits to main since this releaseWhat's Changed
Fixed
- Timestamp formatting: All timestamps now use AT Protocol spec-compliant millisecond precision (
2026-02-20T18:19:03.889Z) instead of the overly precise 7-digit format (2026-02-20T18:19:03.8899309Z) previously generated byDateTime.ToString("o").
Added
AtProtoJsonDefaults.FormatTimestamp(DateTime)— formats anyDateTimeto AT Proto spec-compliant string.AtProtoJsonDefaults.NowTimestamp()— returns the current UTC time as an AT Proto timestamp.
Packages
Install from the Forgejo NuGet registry:
<PackageReference Include="ATProtoNet" Version="0.1.1" /> <PackageReference Include="ATProtoNet.Server" Version="0.1.1" /> <PackageReference Include="ATProtoNet.Blazor" Version="0.1.1" />Full changelog: v0.1.0...v0.1.1
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Timestamp formatting: All timestamps now use AT Protocol spec-compliant millisecond precision (
-
v0.1.0
Stablereleased this
2026-02-19 22:50:09 +00:00 | 17 commits to main since this releaseATProto.NET v0.1.0 — Initial Release
A comprehensive .NET SDK for the AT Protocol with focus on custom lexicon applications.
Packages
Install from the Forgejo NuGet registry:
<PackageReference Include="ATProtoNet" Version="0.1.0" /> <PackageReference Include="ATProtoNet.Server" Version="0.1.0" /> <PackageReference Include="ATProtoNet.Blazor" Version="0.1.0" />Highlights
- RecordCollection<T> — typed CRUD for custom lexicon records
- Custom XRPC — call any AT Proto endpoint with QueryAsync/ProcedureAsync
- Identity types — Did, Handle, AtUri, Nsid, Cid, Tid, RecordKey
- Session management — auto-refresh, persistence via ISessionStore
- ASP.NET Core — DI, authentication handler
- Blazor — login, profile, feed components
- Firehose — real-time event streaming
- 218 unit tests, 20 integration tests passing against real PDS
See the documentation for full guides.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
ATProtoNet.0.1.0.nupkg
0 downloads ·
2026-02-19 22:50:26 +00:00 · 128 KiB -
ATProtoNet.Blazor.0.1.0.nupkg
0 downloads ·
2026-02-19 22:50:26 +00:00 · 23 KiB -
ATProtoNet.Server.0.1.0.nupkg
0 downloads ·
2026-02-19 22:50:26 +00:00 · 14 KiB