আমি কেবল ভাবছি কেন জেডাব্লুটি টোকেন ডিকোডিং এবং যাচাইয়ের জন্য কিছু লাইব্রেরি ব্যবহার করবেন না।
নিম্নলিখিত সিউডোকোড ব্যবহার করে এনকোডড জেডাব্লুটি টোকেন তৈরি করা যেতে পারে
var headers = base64URLencode(myHeaders)
var claims = base64URLencode(myClaims)
var payload = header + "." + claims
var signature = base64URLencode(HMACSHA256(payload, secret))
var encodedJWT = payload + "." + signature
কোনও নির্দিষ্ট গ্রন্থাগার ছাড়াই এটি করা খুব সহজ। নিম্নলিখিত কোড ব্যবহার করে:
using System;
using System.Text;
using System.Security.Cryptography;
public class Program
{
public static void Main()
{
var header = "{\"typ\":\"JWT\",\"alg\":\"HS256\"}";
var claims = "{\"sub\":\"1047986\",\"email\":\"jon.doe@eexample.com\",\"given_name\":\"John\",\"family_name\":\"Doe\",\"primarysid\":\"b521a2af99bfdc65e04010ac1d046ff5\",\"iss\":\"http://example.com\",\"aud\":\"myapp\",\"exp\":1460555281,\"nbf\":1457963281}";
var b64header = Convert.ToBase64String(Encoding.UTF8.GetBytes(header))
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
var b64claims = Convert.ToBase64String(Encoding.UTF8.GetBytes(claims))
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
var payload = b64header + "." + b64claims;
Console.WriteLine("JWT without sig: " + payload);
byte[] key = Convert.FromBase64String("mPorwQB8kMDNQeeYO35KOrMMFn6rFVmbIohBphJPnp4=");
byte[] message = Encoding.UTF8.GetBytes(payload);
string sig = Convert.ToBase64String(HashHMAC(key, message))
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
Console.WriteLine("JWT with signature: " + payload + "." + sig);
}
private static byte[] HashHMAC(byte[] key, byte[] message)
{
var hash = new HMACSHA256(key);
return hash.ComputeHash(message);
}
}
টোকেন ডিকোডিং উপরের কোডটির বিপরীত সংস্করণ the স্বাক্ষরটি যাচাই করতে আপনার একই প্রয়োজন হবে এবং গণনা স্বাক্ষরের সাথে স্বাক্ষরের অংশের তুলনা করুন।
আপডেট: তাদের জন্য কীভাবে বেস lsa64 টি ইউরালফের এনকোডিং / ডিকোডিং করা যায় তা নিয়ে লড়াই করে যাচ্ছেন দয়া করে অন্য একটি এসও প্রশ্ন , এবং উইকি এবং আরএফসিও দেখুন