You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I need to encrypt Payload data with a JWK string. I can encrypt using the Nuget package, but I have a problem with the header part of the encrypted JWT data. The required header content should only contain the values "alg" and "kid". However, in all the ways I tried, this header part (at least in C#) always comes with the values "alg" and "typ".
When I encrypt this JWK and Payload data with the Java code I use as an example, I can successfully produce JWT information.
public class Main {
public static void main(String[] args) throws ParseException, JOSEException, IOException {
String payload = "{"meta": {"id": "168bba80-5e69-485e-8d16-2e9750cb9c2e","clientInfo": [{"type": "serverIp","value": "WEB"}]},"data": {"orderId": "","amount": 2,"operation": "sales","returnUrl": {"link": "https://","type": "web"},"customer": {"nationalNumber": "","gsmNumber": ""},"paymentOptions": {"threeDSecureCheck": true,"installmentOnlyForCommercialCard": true}}}";
String jwkStr = "{\"kty\":\"oct\",\"kid\":\"28075256-56c8-11ee-8c99-0242ac120002\",\"k\":\"eSvOcX4/NrjfRsShI+KgHw==\",\"alg\":\"HS256\"}";
final JWK jwk = JWK.parse(jwkStr);
final JWSObject jws = new JWSObject((
new JWSHeader.Builder(JWSAlgorithm.HS256).keyID(jwk.getKeyID()).build()),
new Payload(payload)
);
JWSSigner signer = new MACSigner(jwk.toOctetSequenceKey());
System.out.println("key"+jwk.toOctetSequenceKey());
jws.sign(signer);
final String httpBody = jws.serialize();
System.out.println(httpBody);
}
}
C#:
using Jose;
using Newtonsoft.Json;
using System.Text;
class Program
{
static void Main()
{
var jwtRequest = new TokenRequestDto
{
Kid = "28075256-56c8-11ee-8c99-0242ac120002",
K = "eSvOcX4/NrjfRsShI+KgHw==",
Alg = "HS256"
};
var data = "{\"meta\": {\"id\": \"168bba80-5e69-485e-8d16-2e9750cb9c2e\",\"clientInfo\": [{\"type\": \"serverIp\",\"value\": \"WEB\"}]},\"data\": {\"orderId\": \"\",\"amount\": 2,\"operation\": \"sales\",\"returnUrl\": {\"link\": \"https://\",\"type\": \"web\"},\"customer\": {\"nationalNumber\": \"\",\"gsmNumber\": \"\"},\"paymentOptions\": {\"threeDSecureCheck\": true,\"installmentOnlyForCommercialCard\": true}}}";
var jsonKey = JsonConvert.SerializeObject(jwtRequest);
byte[] hmacKey = Encoding.UTF8.GetBytes(jwtRequest.K);
if (hmacKey != null)
{
// JWT token oluştur
string jwtToken = JWT.Encode(data, hmacKey, JwsAlgorithm.HS256);
Console.WriteLine(jwtToken);
}
else
{
Console.WriteLine("Error: Unable to create JWT. Check JSON key data.");
}
Console.ReadKey();
}
public class TokenRequestDto
{
public string Kid { get; set; }
public string K { get; set; }
public string Alg { get; set; }
}
}
The text was updated successfully, but these errors were encountered:
Hello,
I need to encrypt Payload data with a JWK string. I can encrypt using the Nuget package, but I have a problem with the header part of the encrypted JWT data. The required header content should only contain the values "alg" and "kid". However, in all the ways I tried, this header part (at least in C#) always comes with the values "alg" and "typ".
When I encrypt this JWK and Payload data with the Java code I use as an example, I can successfully produce JWT information.
I need your help on this matter. Thanks.
C# JWT Header:
{
"alg": "HS256",
"typ": "JWT"
}
Java JWT Header:
{
"alg": "HS256",
"kid": "7b76e130-73de-4562-9c20-ad5e983e22d8"
}
Java:
package org.example;
import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.jwk.JWK;
import okhttp3.*;
import java.io.IOException;
import java.text.ParseException;
public class Main {
public static void main(String[] args) throws ParseException, JOSEException, IOException {
String payload = "{"meta": {"id": "168bba80-5e69-485e-8d16-2e9750cb9c2e","clientInfo": [{"type": "serverIp","value": "WEB"}]},"data": {"orderId": "","amount": 2,"operation": "sales","returnUrl": {"link": "https://","type": "web"},"customer": {"nationalNumber": "","gsmNumber": ""},"paymentOptions": {"threeDSecureCheck": true,"installmentOnlyForCommercialCard": true}}}";
}
C#:
using Jose;
using Newtonsoft.Json;
using System.Text;
class Program
{
static void Main()
{
var jwtRequest = new TokenRequestDto
{
Kid = "28075256-56c8-11ee-8c99-0242ac120002",
K = "eSvOcX4/NrjfRsShI+KgHw==",
Alg = "HS256"
};
}
The text was updated successfully, but these errors were encountered: