Так как задача такая, которая может пригодиться многим, то оставлю здесь решение.
Значит задача была по подключению библиотеки
JsonWebToken.
Но, она тянет такой вагон зависимостей, что Зеннопостер в шоке (запустить мне получилось, но интерфейс проджект мейкера умирал преждевременно на версии 5.47).
Предложил вариант собрать код в EXE, в виде консольного приложения, и вот что с этого получилось.
Исходник:
using System;
using System.Text;
using JsonWebToken;
namespace TokenDemo {
public static class Program {
public static void Main(params string[] array) {
string PrivKey = string.Empty;
string Email = string.Empty;
if(array.Length == 1) {
string[] data = array[0].Split('|');
PrivKey = Encoding.UTF8.GetString(Convert.FromBase64String(data[0]));
Email = Encoding.UTF8.GetString(Convert.FromBase64String(data[1]));
}
if(string.IsNullOrEmpty(PrivKey) || string.IsNullOrEmpty(Email)) {
Console.WriteLine("error");
return;
}
var Rnd = new Random();
string random = Rnd.Next().ToString("X");
Jwk privJwk = Jwk.FromJson(PrivKey);
JwsDescriptor descriptor = new JwsDescriptor() {
Algorithm = SignatureAlgorithm.EcdsaSha256,
SigningKey = privJwk,
IssuedAt = DateTime.UtcNow,
Audience = "usr",
JwtId = random,
KeyId = 1.ToString()
};
descriptor.AddClaim("email", Email);
JwtWriter writer = new JwtWriter();
string token = writer.WriteTokenString(descriptor);
Console.WriteLine(token);
}
}
}
После чего, получение данных уже можно без проблем получать с Зенно.
Пример вызова такой:
string path = @"C:\ZP\T\jwtv2\exe\ConsoleApp15.exe";
string line = string.Join("|", new[]{
Convert.ToBase64String(Encoding.UTF8.GetBytes(project.Variables["privkey"].Value)),
Convert.ToBase64String(Encoding.UTF8.GetBytes(project.Variables["email"].Value))
});
string error = string.Empty;
try {
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo.FileName = path;
p.StartInfo.Arguments = line;
p.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler((sender, e) => {
if(!string.IsNullOrEmpty(e.Data)){
project.Variables["token"].Value = e.Data;
}
});
p.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler((sender, e) => {
if(!string.IsNullOrEmpty(e.Data)){
project.Variables["token"].Value = e.Data;
}
});
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
}
catch (Exception e){
error = e.Message;
}
Данный подход я использовал уже много раз, когда нужно было отправлять запросы через RestSharp и подобные библиотеки, которые не хотели работать с Зенно (другими словами, это хороший вариант, чтобы выполнять какой-то код сбоку, когда нет возможности выполнять его внутри).