.NET code for generating tokens for "Azure CDN Premium from Verizon" (a.k.a. Edgecast)
This project demonstrates how to generate access tokens for Edgecast in .NET.
The term "Edgecast" refers to the "Verizon Digital Media Services / Edgecast Content Delivery Network CDN", formally known as the "Azure Content Delivery Network Premium from Verizon" in Azure.
The actual implementation in .NET is F#, so you can easily plug it into your .NET core web app, or call it from F# Interactive.
It offers a fluent API for both C# and F#, so token creation is self-explanatory.
F# interactive sample
Just run dotnet fsi ./edgecast.fsx
#r "nuget: BouncyCastle.NetCore, 1.8.8"
#load "edgecastlib/EdgecastCrypto.fs"
open System
open EdgecastCrypto
let inspect msg a =
printfn "%s: %A" msg a
a
let key = "primary202109099dc4cf480b17a94f5eef938bdb08c18535bcc777cc0420c29133d0134d635aa78a1e28f6b883619ed5f920bd3cd79bfe10c42b5d96b7eeb84571ceee4cb51d89"
createTokenValidFor (TimeSpan.FromDays(365.0))
|> inspect "token"
|> encrypt key
|> inspect "encrypted"
|> decrypt key
|> inspect "decrypted again"
|> ignore
This creates a result, similar to this:
token: { ExpirationDate = 9/14/2022 4:50:46 PM
ClientIPAddress = None
AllowedCountries = ["DE"]
DeniedCountries = []
AllowedReferrers = []
DeniedReferrers = []
AllowedProtocol = []
DeniedProtocol = []
AllowedUrls = ["/assets"] }
encrypted: "6CM31tJXEmlAeh11HC-23FlVO96xW9udR_gCPcoX5uzQXnpQo2ThqPEUHO1AuAuLiCvJ-dijWiZHYZeRmdSUpku6I7twHn1AY0w4oECe9HQm6Z-WiatHKwU"
decrypted again: { ExpirationDate = 9/14/2022 4:50:46 PM
ClientIPAddress = None
AllowedCountries = ["DE"]
DeniedCountries = []
AllowedReferrers = []
DeniedReferrers = []
AllowedProtocol = []
DeniedProtocol = []
AllowedUrls = ["/assets"] }
C# sample
using System;
using EdgecastCryptoExtensions;
class Program
{
static void Main()
{
var key = "primary202109099dc4cf480b17a94f5eef938bdb08c18535bcc777cc0420c29133d0134d635aa78a1e28f6b883619ed5f920bd3cd79bfe10c42b5d96b7eeb84571ceee4cb51d89";
_ = EdgecastCrypto.createTokenValidFor(TimeSpan.FromDays(365.0))
.AddAllowedCountry("DE")
.AddAllowedUrl("/assets")
.Inspect("token")
.Encrypt(key)
.Inspect("encrypted")
.Decrypt(key)
.Inspect("decrypted");
}
}
static class Util
{
internal static T Inspect<T>(this T t, string message)
{
Console.Out.WriteLine($"{message}: {t}");
return t;
}
}