zitadel-tools. The command to do that would bekey.json file would be the one you'd download above and output file is the file where it will be saved.

aud field format.aud seems to be an array. aud value to a string and see if that helps"aud":["http://localhost:8080"] to "aud":"http://localhost:8080"scope, it should be scope=openid profile urn:zitadel:iam:org:project🆔zitadel:aud and not scope='openid'assertion again by zitadel-tools and try it and lmk :))http:// in your audience flag--locaton that also creates an issue --location and check your scope
urn:zitadel:iam:org:project🆔zitadel:aud too
zitadel-toolszitadel-toolszitadel-tools key2jwt --audience=<your domain> --key=key.json --output=jwt.txtkey.jsonaudaudaud"aud":["http://localhost:8080"]"aud":"http://localhost:8080"scopescopescope=openid profile urn:zitadel:iam:org:project🆔zitadel:audscope='openid'curl http://localhost:8080/oauth/v2/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \
--data 'scope=openid profile urn:zitadel:iam:org:project🆔zitadel:aud' \
--data 'assertion=<generated token>'assertionhttp://audiencezitadel-tools key2jwt --audience=http://localhost:8080 --key=key.json --output=jwt.txt--locaton--locationurn:zitadel:iam:org:project🆔zitadel:aud{
"iss": "100507859606888466",
"sub": "100507859606888466",
"aud": "https://$CUSTOM-DOMAIN",
"iat": [Current UTC timestamp, e.g. 1605179982, max. 1 hour ago],
"exp": [UTC timestamp, e.g. 1605183582]
}