AlgorandAuthentication 1.0.11
dotnet add package AlgorandAuthentication --version 1.0.11
NuGet\Install-Package AlgorandAuthentication -Version 1.0.11
<PackageReference Include="AlgorandAuthentication" Version="1.0.11" />
paket add AlgorandAuthentication --version 1.0.11
#r "nuget: AlgorandAuthentication, 1.0.11"
// Install AlgorandAuthentication as a Cake Addin #addin nuget:?package=AlgorandAuthentication&version=1.0.11 // Install AlgorandAuthentication as a Cake Tool #tool nuget:?package=AlgorandAuthentication&version=1.0.11
Algorand Standard for authentication implementation in .net
ARC-0014 implementation in .net
https://github.com/algorandfoundation/ARCs/issues/42
Usage
StartUp.cs
public void ConfigureServices(
IServiceCollection services)
{
...
var algorandAuthenticationOptions = new AlgorandAuthenticationOptions();
builder.Configuration.GetSection("AlgorandAuthentication").Bind(algorandAuthenticationOptions);
builder.Services
.AddAuthentication(AlgorandAuthenticationHandler.ID)
.AddAlgorand(o =>
{
o.CheckExpiration = algorandAuthenticationOptions.CheckExpiration;
o.Debug = algorandAuthenticationOptions.Debug;
o.AlgodServer = algorandAuthenticationOptions.AlgodServer;
o.AlgodServerToken = algorandAuthenticationOptions.AlgodServerToken;
o.AlgodServerHeader = algorandAuthenticationOptions.AlgodServerHeader;
o.Realm = algorandAuthenticationOptions.Realm;
o.NetworkGenesisHash = algorandAuthenticationOptions.NetworkGenesisHash;
o.MsPerBlock = algorandAuthenticationOptions.MsPerBlock;
o.EmptySuccessOnFailure = algorandAuthenticationOptions.EmptySuccessOnFailure;
o.EmptySuccessOnFailure = algorandAuthenticationOptions.EmptySuccessOnFailure;
});
...
}
public void Configure(
IApplicationBuilder app
)
{
...
app.UseAuthentication();
app.UseAuthorization();
...
}
appsettings.json
{
"AlgorandAuthentication": {
"AlgodServer": "https://testnet-api.algonode.cloud",
"AlgodServerToken": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"NetworkGenesisHash": "SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=",
"AlgodServerHeader": "X-Algo-API-Token",
"Realm": "2FA#ARC14",
"CheckExpiration": "true",
"Debug": "true"
}
}
Controller/Example.cs
[Authorize]
[HttpPost("Create")]
public async Task<ActionResult<bool>> Create()
{
...
}
Activity diagram
Plantuml:
@startuml
User -> Website: User wish to login to the website
Website -> AnyAlgorandNode : Request /v2/transactions/params
AnyAlgorandNode -> Website : Returns transaction params
Website -> Wallet : Website produces through algosdk messege to be signed, note as realm, params as session timeout
Wallet -> Website: Signed tx, website stores tx in temporary memory, localstorage or cookie the same as jwt
Website --> User: Displays eg auth address
Website -> Backend: Request authorized method, use SigTx Authorization header, fe /getUser
Backend -> AnyAlgorandNode : Request /v2/transactions/params
AnyAlgorandNode -> Backend : Returns current block round number
Backend -> Website: 401 if signature, genesis or round is wrong
Backend -> Website: 200 if authorized and returns content
Website --> User: Displays /getUser content, fe roles or username
@enduml
Example use
Algorand KMD Node
Algorand KMD Node is proxy to algorand participation node which allow to create participation keys. It uses ARC-0014 authentication to ensure no spam traffic to cpu sensitive methods.
Hasura Algorand Auth Web Hook
GraphQL algorand authentication for live websocket authenticated feeds.
https://github.com/scholtz/HasuraAlgorandAuthWebHook
Algorand 2FA Multisig
Project aims to create multisig account from hot wallet account, 2fa authentication account and cold storage account.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. 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. |
-
net6.0
- Algorand2 (>= 2.0.0.2024051911)
- Microsoft.AspNetCore.Authentication.Negotiate (>= 6.0.35)
- Microsoft.Extensions.Caching.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.4)
- Microsoft.Extensions.Options (>= 6.0.0)
-
net7.0
- Algorand2 (>= 2.0.0.2024051911)
- Microsoft.AspNetCore.Authentication.Negotiate (>= 7.0.20)
- Microsoft.Extensions.Caching.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 7.0.1)
- Microsoft.Extensions.Options (>= 7.0.1)
-
net8.0
- Algorand2 (>= 2.0.0.2024051911)
- Microsoft.AspNetCore.Authentication.Negotiate (>= 8.0.10)
- Microsoft.Extensions.Caching.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Options (>= 8.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.