hidekatsu-izuno / josekit-rs

JOSE (Javascript Object Signing and Encryption) library for Rust (based on OpenSSL).
Apache License 2.0
74 stars 31 forks source link

Allow De/Serialization of JWK Keys #14

Closed naftulikay closed 2 years ago

naftulikay commented 2 years ago

josekit::jwk::Jwk is now able to be serialized and deserialized as a transparent representation of the underlying map.

I need to be able to write and read JWK keys to/from disk in a keyring and serve the public JWK keys over HTTP, similar to how Google serves their public keys in JWK format:

Google JWK Keys ```json { "keys": [ { "e": "AQAB", "alg": "RS256", "kty": "RSA", "use": "sig", "kid": "33ff5af12d7666c58f9956e65e46c9c02ef8e742", "n": "tQSZmOenF0ffW7BrOzL8u4r5XH0xsI3QpFYvVSCFWrBiPWDPVjfssA6uoGI6sn3aw810Er6Atv2BjeUvrFeMLkFwuRRFyE95aCSx0s-hDNtXsIOvX7LcJgQn3F3gVUPUvQDfL40DnMq0CWWpNCxNggBdok4emegiQO-C4J7aKy_ACcznsmMVtABvJDM_KpayIfWQfujsfQ8x0pggoxfPIopZLzZaMq8teEYcpVzbNvMyMopNMNPvnKMe56O_Clf_3HQBQtovHYCOK33mJmx4u1aijRMIfgoJYdVA26raLYx5_gNu_De9VWyrvknNwCSYtS0t7xIqzH2oiKtGiM9nJw" }, { "n": "wsM16HUl8VtOHqW-QT_k4fe67AsHPZfB05aUSIiSdPOBONDrAq7ylsVOzKRVOuCVwwmLTDL3k6fBFRYDMmhmo28AKkD6AtDA9qqkuXAovA0TFeeQ_WDHlpstE-ZgTPyykIyoG0lIMtdaZ7wKAoNv75QhtI_PAjtmJ4lCa_xx258rxr1-E8ZvUlT2I5gh_vLqYpsRuWX6uZ5Dl5SILPJuwBdfD-PIvgBGEDHT2ZpKR_IoxLNZDR7WtR6xCTiqrPj0SbMOOpyN7G28jH_jJfdw-9CD5AbWN7BlDmJU-oKcgUTee9lZLuYIPy1J7LtAac4MnGMGbupmPOQ1jzAaMpStrw", "kid": "ca00620c5aa7be8cd03a6f3c68406e45e93b3cab", "use": "sig", "kty": "RSA", "alg": "RS256", "e": "AQAB" } ] } ```

This is essentially the following:

#[derive(Serialize)]
pub struct JwkKeys {
    pub keys: Vec<Jwk>,
}

Making Jwk serializable and deserializable makes it trivial for users to save/load JWK keys for a variety of uses.

hidekatsu-izuno commented 2 years ago

Thank you for your pull request. I decided to accept your suggestion.