我想弄清楚兩種分佈式服務之間的身份驗證方式。如何使用(並創建)用於JWT令牌的私鑰/公鑰加密的X509證書
我不想在每個服務主機上分配一個共享密鑰,因爲這意味着一旦一臺主機遭到入侵,所有主機都會受到攻擊。
所以我的情況是:
- 主機A就知道了主機B的公鑰
- 主機A編碼和encryptes使用主機B's公鑰
- 主機B的智威湯遜接收並使用其私鑰解密jwt,它只知道自己。
何塞 - 智威湯遜包: https://github.com/dvsekhvalnov/jose-jwt
似乎是一個不錯的選擇我。除了簽署jwt之外,它還支持使用私鑰/公鑰進行加密。
在有編碼下面的例子和頁面解碼JWT:
編碼:
var publicKey=new X509Certificate2("my-key.p12", "password").PublicKey.Key as RSACryptoServiceProvider;
string token = Jose.JWT.Encode(payload, publicKey, JweAlgorithm.RSA_OAEP, JweEncryption.A256GCM);
解碼:
var privateKey=new X509Certificate2("my-key.p12", "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
string json = Jose.JWT.Decode(token,privateKey);
現在,這裏是我不明白的:
- 如何創建一個只包含公鑰信息(編碼JWT主機/服務A)一個的.p12證書文件?
- ..以及如何創建一個包含公鑰和私鑰信息(用於解碼jwt的主機/服務B)的.p12證書文件?
從我所做的所有研究中,我得到的印象是您只能製作一個包含兩者的.p12文件,或者只包含公鑰的文件。但似乎沒有辦法創建兩個.p12文件,一個包含兩個信息,一個只包含公鑰。我錯過了什麼?
感謝您的回答。