Sample VSA REST API Client
Password Authentication
The two following code samples illustrate how to build a C# client that can authenticate the VSA REST API.
NOTE The Password Authentication is deprecated and will be removed from VSA as of October 2021.
class Hash
using System;
using System.Text;
using System.Security.Cryptography;
namespace SampleVsaRestApiClient
{public class Hash
{ public string RandomNumber { get; protected set; } public string RawSHA256Hash { get; protected set; } public string CoveredSHA256Hash { get; protected set; } public string RawSHA1Hash { get; protected set; } public string CoveredSHA1Hash { get; protected set; }public Hash( string UserName, string Password )
{RandomNumber = GenerateRandomNumber( 8 );
RawSHA256Hash = CalculateHash( Password, "SHA-256" );
CoveredSHA256Hash = CalculateHash( Password, UserName, "SHA-256" );
CoveredSHA256Hash = CalculateHash( CoveredSHA256Hash, RandomNumber, "SHA-256" );
RawSHA1Hash = CalculateHash( Password, "SHA-1" );
CoveredSHA1Hash = CalculateHash( Password, UserName, "SHA-1" );
CoveredSHA1Hash = CalculateHash( CoveredSHA1Hash, RandomNumber, "SHA-1" );
}
private string CalculateHash( string Value1, string Value2, string HashingAlgorithm )
{return CalculateHash( Value1 + Value2, HashingAlgorithm );
}
private string CalculateHash( string Value, string HashingAlgorithm )
{byte[] arrByte;
if( HashingAlgorithm == "SHA-1" )
{SHA1Managed hash = new SHA1Managed();
arrByte = hash.ComputeHash( ASCIIEncoding.ASCII.GetBytes( Value ) );
}
else if( HashingAlgorithm == "SHA-256" )
{SHA256Managed hash = new SHA256Managed();
arrByte = hash.ComputeHash( ASCIIEncoding.ASCII.GetBytes( Value ) );
}
else
{ throw new ApplicationException( string.Format( "Unknow hashing algorithm: {0}", HashingAlgorithm ) );}
string s = "";
for( int i = 0; i < arrByte.Length; i++ )
{s += arrByte[i].ToString( "x2" );
}
return s;
}
private string GenerateRandomNumber( int numberOfDigits )
{System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
byte[] numbers = new byte[numberOfDigits * 2];
rng.GetNonZeroBytes( numbers );
string result = "";
for( int i = 0; i < numberOfDigits; i++ )
{result += numbers[i].ToString();
}
result = result.Replace( "0", "" );
return result.Substring( 1, numberOfDigits );
}
}
}
class Program
using System;
using System.Text;
using System.Net.Http;
namespace SampleVsaRestApiClient
{class Program
{static void Main( string[] args )
{string Url = @"http://myvsa.com";
string UserName = "UserName";
string Password = "Password";
// Getting authenticated...
var h = new Hash( UserName, Password );
var headerParam = Convert.ToBase64String(
Encoding.Default.GetBytes(
string.Format( "user={0},pass2={1},pass1={2},rpass2={3},rpass1={4},rand2={5}",UserName,
h.CoveredSHA256Hash,
h.CoveredSHA1Hash,
h.RawSHA256Hash,
h.RawSHA1Hash,
h.RandomNumber ) ) );
using( var client = new HttpClient() )
{client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue( "Basic", headerParam );
Console.WriteLine( "Making request... " );
var response = client.GetAsync( new Uri( string.Format( @"{0}/api/v1.0/auth", Url ) ) ).Result;Console.WriteLine( "StatusCode : " + (int)response.StatusCode + " " + response.StatusCode.ToString() );
if( response.IsSuccessStatusCode )
Console.WriteLine( response.Content.ReadAsStringAsync().Result );
}
}
}
}
Personal Token Authentication
The following code sample illustrate how to build a C# client that can authenticate the VSA REST API.
class Program
using System;
using System.Net.Http;
using System.Text;
namespace SampleVsaRestApiClient
{ class Program
{ static void Main(string[] args)
{ string url = @"http://myvsa.com";
string username = "Username";
string pat = "PAT";
// Getting authenticated...
var headerParam = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{pat}")); using (var client = new HttpClient())
{ client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", headerParam); Console.WriteLine("Making request... "); var response = client.GetAsync(new Uri($"{url}/api/v1.0/auth")).Result; Console.WriteLine("StatusCode : " + (int)response.StatusCode + " " + response.StatusCode); if (response.IsSuccessStatusCode)
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
}
}
}