Skip to content
Snippets Groups Projects
Commit 30df4b41 authored by David Schwarzmann's avatar David Schwarzmann
Browse files

docs(examples-and-docusaurus-config): Fixed edit link and added a new example for SETs

parent f3b40164
No related branches found
No related tags found
No related merge requests found
......@@ -38,7 +38,7 @@ module.exports = {
},
footer: {
style: 'light',
copyright: `Copyright © ${new Date().getFullYear()} FITKO (Föderale IT-Kooperation) | Zum Gottschalkhof 3 | 60594 Frankfurt am Mail | E-Mail: poststelle@fitko.de | https://www.fitko.de | Die FITKO ist eine Anstalt des öffentlichen Rechts. Sie wird vertreten durch die Präsidentin Frau Dr. Annette Schmidt.`,
copyright: `Copyright © ${new Date().getFullYear()} FITKO (Föderale IT-Kooperation) | Zum Gottschalkhof 3 | 60594 Frankfurt am Main | E-Mail: poststelle@fitko.de | https://www.fitko.de | Die FITKO ist eine Anstalt des öffentlichen Rechts. Sie wird vertreten durch die Präsidentin Frau Dr. Annette Schmidt.`,
},
},
presets: [
......@@ -48,7 +48,7 @@ module.exports = {
docs: {
sidebarPath: require.resolve('./sidebars.js'),
editUrl: ({ version, versionDocsDirPath, docPath }) =>
`https://git.fitko.de/fit-connect/api/-/edit/${gitBranch}/${versionDocsDirPath}/${docPath}`,
`https://git.fitko.de/fit-connect/docs/-/edit/${gitBranch}/${versionDocsDirPath}/${docPath}`,
routeBasePath: '/',
},
theme: {
......
import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.RSASSASigner;
import com.nimbusds.jose.jwk.JWK;
import com.nimbusds.jose.jwk.JWKSet;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
public class GenerateSignedToken {
private static final InputStream jwksPath = GenerateSignedToken.class.getClassLoader().getResourceAsStream("jwks.json");;
private static final UUID signatureKeyId = UUID.fromString("6508dbcd-ab3b-4edb-a42b-37bc69f38fed");
private static final String subject = "submission:f65feab2-4883-4dff-85fb-169448545d9f";
private static final String event = "https://schema.fitko.de/fit-connect/events/accept-submission";
private static final String transactionId = "case:f73d30c6-8894-4444-8687-00ae756fea90";
public static void main(String[] args) {
try {
JWKSet localKeys = JWKSet.load(jwksPath);
JWK key = localKeys.getKeyByKeyId(signatureKeyId.toString());
System.out.println(signatureKeyId);
System.out.println(localKeys);
if (key == null) {
throw new RuntimeException("Cannot find key with specified Key Id");
}
JWSSigner signer = new RSASSASigner(key.toRSAKey());
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
// ToDO: Inject configured domain in stack
.issuer("https://api.fitko.de/fit-connect/")
.issueTime(new Date())
.jwtID(UUID.randomUUID().toString())
.subject(subject)
.claim("events", Map.of(event, Map.of()))
.claim("txn", transactionId)
.build();
JWSHeader header = JWSHeader.parse(Map.of(
"typ", "secevent+jwt",
"kid", key.getKeyID(),
"alg", "PS512"
));
SignedJWT signedJWT = new SignedJWT(
header,
claimsSet);
signedJWT.sign(signer);
System.out.println(signedJWT.serialize());
} catch (IOException | ParseException e) {
e.printStackTrace();
throw new RuntimeException("Error during loading of JWK-Set with signature keys.");
} catch (JOSEException e) {
e.printStackTrace();
throw new RuntimeException("Could not generate SET");
}
}
}
import com.nimbusds.jose.JWSAlgorithm;
import com.nimbusds.jose.JWSHeader;
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import java.text.ParseException;
public class ParseSignedToken {
private static final String tokenString = "eyJraWQiOiI2NTA4ZGJjZC1hYjNiLTRlZGItYTQyYi0zN2JjNjlmMzhmZWQiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.eyJzdWIiOiJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsImlzcyI6Imh0dHBzOlwvXC9hcGkuZml0a28uZGVcL2ZpdC1jb25uZWN0XC8iLCJ0eG4iOiJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIsImlhdCI6MTYyNjM0MjkzNCwianRpIjoiZGI3MmIyMjctNWExMS00YzhiLWFlN2QtZTNjYmE2MjlkOTQ5IiwiZXZlbnRzIjp7Imh0dHBzOlwvXC9zY2hlbWEuZml0a28uZGVcL2ZpdC1jb25uZWN0XC9ldmVudHNcL2FjY2VwdC1zdWJtaXNzaW9uIjp7fX19.ZlKVrl0KIrT0eWiP7EzZ8zhqQRuqITVM66LY55BStRVz8r6mAN9lSos3S9lebXAbZSa5_x5NK99P3NuLuv2XdqnZBcW5l5vO1gghnuMDCh5YCKEd812ZcStlRJoq1c5E1cDfZ1Clkgbl8JAXOkwnNckEmD4y29eXrB0Dy3dK6Egx8qeR3b2pi1KzJshhohvgXwhNNYMszxWwUi0VvzLDy8VTJVD4jISMBL6Z7ujmt7wsoeSLpQpPJDL38y1TeLeT6AXc4siu7_cNphEBIw1yXl-R3X9SQFnS8466zUgokZ8hi2x66-yRDgnukNOOCREiD1OlYZGsL6kseONA9NKOpw";
private static void validateHeader(JWSHeader header) {
assert header.getAlgorithm() == JWSAlgorithm.PS512 : "The provided alg in the SET header is not allowed.";
assert header.getType().toString().equals("secevent+jwt") : "The provided typ in the SET header is not secevent+jwt";
assert header.getKeyID() != null : "The kid the SET was signed with is not set.";
// ToDo: Check if kid is a valid UUID
}
private static void validatePayload(JWTClaimsSet payload) throws ParseException {
assert payload.getClaim("txn") != null : "The claim txn is missing in the payload of the the SET.";
assert payload.getClaim("events") != null : "The claim events is missing in the payload of the SET.";
assert payload.getJSONObjectClaim("events").keySet().size() == 1 : "Only exactly one event is allowed.";
}
public static void main(String[] args) {
try {
SignedJWT signedJWT = SignedJWT.parse(tokenString);
try {
validateHeader(signedJWT.getHeader());
validatePayload(signedJWT.getJWTClaimsSet());
} catch (AssertionError e) {
throw new RuntimeException(e.getMessage());
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
{
"keys": [
{
"alg": "PS512",
"d": "Xm0Ua2QK8sUjl2vWtaDRQoooKwRNRSCWPOEZG4p8Ru-45DZMJOD4kzdXSy57Qhbv6ggoukoY-HDMWP2dSbnmfneZjsCIUAgZQzrvYJlUR4jkVakTaq5hrmUDNIunjX8DSTqSX78I-fhMdSsF1WqI94ZXFIcME56dC9b85GeEUBduTLnRVTfMxuKQqCRKt7CacQN_JJNu2MsgEoJdb9emRdjJrwqae44h6iljwo5j14K6QWpe0QiZAZIMr2Rmx-_z4fmFkPBpm6gLAGNX_VknKLpUc2QEbBuKrPdYIhZKT-FwKigAlumPhS9q8ASphS7w6tL_RoiYWCQrFuFYaNN3OQ",
"dp": "tG_RjrefRSS_PcPg8JLFlmcob2s0ii0qvBGY1sND5WmCPPTtbwy3XelGJlDl_7I7aZHzl2cK0DE5I8To-HM1_SqBJQc_3UtccbEmNFwIWPrKzXSjJ3b9JEYBdab3cr5W5xLI22gcUp-qT9o3xVPoKRkQldXeweBpSB62oNUHYM8",
"dq": "iC-8YxuQHB3KOaxSmXJIJSgZMHyV-qiRyeQHHt1iPXDyyf0KNEdl4vzpmZNToAAn3IEHavcFxq0gEhOrKSdmFmvCWetH-PKR4Nyzf50G3PYhHy6z19xZpTIwJixJirvWsYzbZl6crGGLrUr27QV4GfhjPQGXyYIDx2xzpgtb1v8",
"e": "AQAB",
"key_ops": [
"verify"
],
"kid": "6508dbcd-ab3b-4edb-a42b-37bc69f38fed",
"kty": "RSA",
"n": "65rmDz943SDKYWt8KhmaUaFob08V3Y3_27yc7IXMH7IG3GDsDP49hXeJCkBFtkygZZj8zrrj-Xe2pW-KfZCyoucllfCrYwweISPLe0yilDw7Unz1uZH8V8h_92l6GFokiDIDzeDHifaqxZ0fVE9v7b93CDAxOdyRhM4p8VhoPn_KBEaFLfRxrY2DGWO24IE38Qk5V_1Xm41UuIBQOR1qoVJHu_2x2fgQ4cKdyhBrgXkMB0oqs-IKqMcmTbJCevrOxOugNr1G2HuvrytOMGsFh3UNfOgaTEqLz9yGZbfQvjOdICLUjdhxOXkFEgpFv6ga16_y9bAdoQJZRpcRr3_v9Q",
"p": "_hKAwPTn5X0bMNUNVzdtZAbhRea1nb2_ntKccPRcCNopXV-zokPPU20qIq351PpeSO4rQC-18JxCcu8wjvyNwWugOfQGeKk-E5nN1avLYPiLwLMXwZ3SuoKY8G5XhN6NAJCXW6gal6o4_clKw1BDTpyDtwN-9jiubZlH29mnM9M",
"q": "7WSGpeG_tOw1WiKa_-5cnOjUxfcD5X1BbmvSSkNSY2uXZ9t6QH4eUQh-sUzqm7G_2X56RuYcNvSIJf4kiwD7bg2-9S2LhqAgmQ7P6OhClC91rRr6RwUORobsexxUncL1sZj1T7M273ZZO0b1aW1hqI-71lWRZraWNDMkrwpXmBc",
"qi": "mmU2qZfOisOr2VWPOW1J-QVONqu6Bbs3KEutOOiqlo4oCcxGcAoa34ttRdRnnKq2scEfYVIUuaRFlw5lnwVgNTr-gOyFM3ctJoskts7AIuHjt7lSGp5DGQ9RZTVKJfKkgfCxxOT-Zga7fIP0sj92I5QkYB2IlUnsSoKFrtwl8eg"
},
{
"alg": "PS512",
"d": "LNvxSSRjni6YlrsnTNhFeANQattEg2ozb3gFsXdNNUoWkbrfzxBe_5PuJVGxL_GhatINDtVzr2x_3rT7u386MqbZT0_jUCYnvHhSf1tZb_zCuev6gb8GWogXhBryyeuEQyYXBu_NkofsFodl55h_KxM7WwytA5eB6B0k8Loax_lS6Xae8pD5TUy_wbsEwgY12M1BTV5Q_Mj0H-O-jGgYkoH3pXz-dqeezAk19WxVYy9DDK39gbFnxW3kWuMYDbyq3ZcUL_tk-mjCuID7ED90Gxy-bX_ppp-kxD0LRBwxFc1OSM17m0qZhQdVJq28eWcNhVtd3ym8Mkd1zsRjc-gAafyaB0nczdX6z2LsqlZ9ZAz6N8AS6lCvdVbnJbh6NDMpgxtcrCun1x49kVdrmV-2rfiaRemKvHHfJWw6ZHcNpa3eW4NLaSljJSZebviYxCPB1DyMZRhCu9W2Ee_VQ4sAGJtLrMWcRtiL5KdG6BAwiIr3pUXphb9UgH8dL_uQQ7hoNOTAUlPek5t0V0F0z-f6zQ1O0DWqFOPO4_3WOI5NJF_mVsmO9DS9Nc9T5iAMtadm2FmgoecsFdBOV-AiG1xpixCVgz0iPhgDEHkNMKV1rpwQ8h3e4VZXQZuzqgZmGolB98AznKQKfnFjwB0DlRxn0vtAovLvxuA8ay71vBCBaHE",
"dp": "Ntxgy_DYcr1yaVFIG4RBxo0SrE3Efn14dB76Q3-7Ff9lMW5iMD6UUuI-PjSO-9XmdOJVoa8w7ia0QxdQucbGMbiWWWXQ4KumtGqJQxaNYJYPBZY40-BsBhB4U9VMwCNZiaFLYPA9T_cXQw7OdPmRVRhsfHGc9JxSd2F9xb6YsQF7O_YhZrJo2M3mD_DxqPPmPLkf86rono7SG1LakxR8TX6b8N3iOChuWEmkQ7A6UIpZaC4t7INdtVXfffl9R3xHfgV0So4rZe2lKScekOvG9s3V5rZFNIXnCXqG2LpXf4fp5xU93KA1yl04E9Dx6Esw2EH7A3lYLVTbwJBcDdNfsQ",
"dq": "OlXOPw1N-K5sbr2kVnoGCZuIiAf602_JnDvAmOwxRGNBRhieTLM3oQx9RayDh0EPxDZHX5jbktw2SqZPFXdhYlJpNamvQ0HFaAGARQcK5x1lCM8FFRCx6HkLeeeB59Ju3A4JpaynBIoMKFe3SdvgqqMIZ3EktrqhGZgNi_efHnn57ASJxj-dDINfBB7f3qCEyKSTvXQ3PdlOkurE_szIm1KS6tzFgzBfxXSiiYuV_oMArJOSALOA0Q446fEU4kzrGZI2JQCT1uZEM3q8BRPTcxmR_mgfcgDjpEYrmtH6udH_7I9r6IwbufiELe7MX-6kUbA8PS2H3BLfqB1ge6wUKQ",
"e": "AQAB",
"key_ops": [
"verify"
],
"kid": "14a70431-01e6-4d67-867d-d678a3686f4b",
"kty": "RSA",
"n": "wnqKgmQHSqJhvCfdUWWyi8qPz7J_KAdL2CkjB2rRWvGWFowkizSMjl4mzSSJVVA1UVPopTBBYd44ckn6SMRm7SK7b0N2BIeK23Bx7i6mugNDdkQePZDx2iRO_HfyINu2WIo5Fj_Iw9tUhzJr7IgzZ_fYRrglzXEy-80UIg5i1N6Rt-skwE7HBRB2HB_hD65OL-jefz1tgC1DvFPEDd0HnSUj4AnSPKCQeuCewWXXYfo_B42x28aD1TextSx4HTUZoFpB7WYUuX82-V-fSl5U4rwIpAi5TqYvhDR9IdfRS1k60Myk9LVIDOJ8b3p5M_-B8imctGFllzyk6aqnSOTkqEVFgO1eT3Go3Vjn739_QlL74v37QEYT-G5y541u8BwY67OIEeXyzjazGg3-Gefn4S_3dAemeVLUMcxrUgZuFk6sbHtzWcJXEFrRZZQECvn2bWjLKPrmuKrY8e6c6YplZvIbOZCP5z5IVgrqGhalJqx1wi6VuCBH6ZwE6rF1NZCsfY0jNvYiu3fp10k3fVi5L0EY-ESjbe8jmx025xXdEbiJ-Zrw2t0f5eO22TxE4-58JGi3rve15Ij_cjbGeliM7XQphogIijGbMX7mrNpWM5tE18aRVHuBhBhlSHAy5eLGZ7dpup3-E4yVv3TrQVvGtsjrJVjvJR-s_D7rWoBcJVM",
"p": "95WErVoEgW0R2ns2aldRmT3BnqDbFzLJWDzlNpPXoEk_3V7MiTuzKnWQ8uYJYqEF793GUfOQrrn8t65FeamexTSRt1-xI5VfTOrFCz5gqLq2n85UlTqhYRIhAXlmTjOTNvHhOZFVSjkILqVhn1N-X0uDRswpbkVMd4UdbQ5SbGr5OIpxQnSxL-RWsZtDnu4cSXbKz7aZrNq-xwGwxtUC0fh693b5y6ewwVksn5TIsg8Nwm8qrEmnzLqqE4yyarb3DNCezAoeLnym9Ivk7Gc646Hga2U4kOPSb-7M5lGWnXJc_WlCI7dp2ee3P4P_LPjK27MynoVn4Ov1PIm5YkAxuQ",
"q": "yRbmDPlxWYWW7vQ-9vuytHReMlATVAEJlmXBC8CU4Pu2qO7FGBieaHAB99ZT9zqIjdfCrYrXfjFaF_niGrG5kra-PK-m-xzTDNul0T1Yrw0k3tKRJ-GAQhKwYTR1MSAjGMm7N0rEm5Bo8-75nJ2hZov4mb1Ex0ab7gaqyui4SShY19pgIAMPg3rLzVevZAZLNIhTnoLx3MhQTzF_L7DRFrfbVxauL151K_SwbFet1jeuV2tTRbdO96N-ac8vtlfCCjKEfJ3Sv_zq9saGHFQjNd_cIOIvpDnQkHqV2paPwGZ3cZVcsaIESHIo6cutrwi6k_Z-G2KUPw3I4wlvBWTFaw",
"qi": "2eIh8Unn2uap4C8CFtDZhJZMVTv9z5YYaq3HCiP9k3Xist3_elVD87pj5ZeDG2HcjfpbXZDSWUvT7XIFe2tyyb3lkC5JCjSJDAEwxiOFlS637qufnmI2mgtURkSaftp-WI79IMzsXAeWNGXxzjS0hdMfZ3_jrd7d1YBIcMag45FZ2P0-aSf6MmPxiMzHXBKCsSY-WbMx30ZiH1ywxJWdExejnsb26FDZqkQtA2Y-_HVhf7bTwC4Tx0mtVzmXRw2UfFVINrf2hO-y7hMm5EL2v1hWOsofHePuyKtm7ijB8s5wFVF6MdXLDab9J4zbNI5aE5sZrBpH3yzJkSz4v2EMZA"
}
]
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment