токен bitzlato

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Всем ку.
Нужен кодер C#, исправить код, конечно не бесплатно, пишите в личку)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Всем ку.
Нужен кодер C#, исправить код, конечно не бесплатно, пишите в личку)
Так как задача такая, которая может пригодиться многим, то оставлю здесь решение.
Значит задача была по подключению библиотеки JsonWebToken.
Но, она тянет такой вагон зависимостей, что Зеннопостер в шоке (запустить мне получилось, но интерфейс проджект мейкера умирал преждевременно на версии 5.47).
Предложил вариант собрать код в EXE, в виде консольного приложения, и вот что с этого получилось.

Исходник:
C#:
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);         
        }
    }
}
После чего, получение данных уже можно без проблем получать с Зенно.
Пример вызова такой:
C#:
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 и подобные библиотеки, которые не хотели работать с Зенно (другими словами, это хороший вариант, чтобы выполнять какой-то код сбоку, когда нет возможности выполнять его внутри).
 
  • Спасибо
Реакции: samsonnn

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
Так как задача такая, которая может пригодиться многим, то оставлю здесь решение.
Значит задача была по подключению библиотеки JsonWebToken.
Но, она тянет такой вагон зависимостей, что Зеннопостер в шоке (запустить мне получилось, но интерфейс проджект мейкера умирал преждевременно на версии 5.47).
Предложил вариант собрать код в EXE, в виде консольного приложения, и вот что с этого получилось.

Исходник:
C#:
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);       
        }
    }
}
После чего, получение данных уже можно без проблем получать с Зенно.
Пример вызова такой:
C#:
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 и подобные библиотеки, которые не хотели работать с Зенно (другими словами, это хороший вариант, чтобы выполнять какой-то код сбоку, когда нет возможности выполнять его внутри).
Согласен еще файлы бы, и тему исправить: токен bitzlato *оказывается здесь я могу тему исправить...
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Согласен еще файлы бы, и тему исправить: токен bitzlato *оказывается здесь я могу тему исправить...
О, так это продолжение вот этой темы?
Для меня сам сайт bitzlato ничего не говорил, из-за чего я и не ходил туда.
А вот
Нужен кодер C#, исправить код,
- это заинтриговало, решил попробовать решить задачку :-)
 

_HEDELKA_

Client
Регистрация
20.02.2022
Сообщения
648
Благодарностей
170
Баллы
43
О, так это продолжение вот этой темы?
Для меня сам сайт bitzlato ничего не говорил, из-за чего я и не ходил туда.
А вот - это заинтриговало, решил попробовать решить задачку :-)
Окей теперь буду делать более ярким заголовки :D
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)