using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using Jose; namespace Sony.Filtr.AppleMusic { public class AppleMusicTokenGenerator { private readonly string _privateKey; private readonly string _kid; private readonly string _iss; public AppleMusicTokenGenerator(string privateKey, string kid, string iss) { _privateKey = privateKey; _kid = kid; _iss = iss; } public string GetJwtToken() { var headers = new Dictionary() { { "alg", "ES256" }, { "kid", _kid }, }; var issued = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var expiresAt = DateTimeOffset.UtcNow.AddMonths(3).ToUnixTimeSeconds(); var payload = new Dictionary() { { "iss", _iss }, { "iat", issued }, { "exp", expiresAt } }; var secretKey = CngKey.Import(Convert.FromBase64String(_privateKey), CngKeyBlobFormat.Pkcs8PrivateBlob); return JWT.Encode(payload, secretKey, JwsAlgorithm.ES256, headers); } } }