2016-05-12 65 views
0

我想要做的就是使用公鑰對令牌進行加密,以便使用私鑰對其進行解密。如何使用公鑰/私鑰對來加密SSO令牌?

我用下面的命令來創建一個密鑰對,但現在我不確定如何加載公鑰在我的代碼,以加密令牌:

$ ssh-keygen -t rsa -b 4096 

什麼Java庫做我使用加載密鑰並使用它來加密字符串?除了代碼示例外,我還會對任何閱讀材料感興趣,以便更好地理解和清晰。

回答

2

我在uservoice/developer文檔中找到了加密SSO令牌的Java(以及許多其他語言)的一個很好的示例。我在Pastebin上寫了pasted the Java code(希望uservoice不介意!),因爲它粘貼在這裏有點太長了。


在另一個說明...我建議你看看 JWT令牌和OAuth的授權。

我建議使用jose4j如果您的令牌是智威湯遜,你實際上並不想對它進行加密,而只是標誌吧!

令牌實際上並不需要在某些體系結構中加密,因爲它們大部分只顯示非敏感信息(您可以訪問什麼,何時訪問多長時間)......安全性位於而不是難以讀取的令牌,但在使它很難獲得令牌首先!一旦攻擊者獲得對令牌的訪問權限,攻擊者就更有興趣使用該令牌(除非有關訪問設備的進一步保護,否則他/她可以這樣做)冒充某人而不是閱讀任何內容該令牌包含(可能沒有什麼,我們將會看到)。

JWTs可以easily read任何人,因爲他們只是URL編碼,使運輸方便......但他們確實需要簽署是可信的,因爲他們通常甚至不保存在授權服務器(他們不如果簽名有效,只需要服務器簽名就可以了),並且只需使用HTTPS連接發送它即可保護傳輸層。

要在純Java中加載RSA公鑰/私鑰,請參閱this question的答案。

要簽署和檢查JWT的簽名,請在jose4j wiki中檢查this page

如果你希望你的令牌保持完全保密的情況,然後使用不透明令牌不包含任何信息本身,而是的實際信息的令牌應該代表,只生成它的服務器可以訪問,所以你的信息甚至不會直接暴露出來......不透明的令牌通常只是一個很長的UUID。

如果您有興趣瞭解有關令牌和授權/身份驗證的更多信息,我建議您查看Nordic APIs博客,其中包含許多文章以及可供您使用的優秀開源資源的鏈接。

免責聲明:我爲贊助北歐API的公司工作。

+0

也許值得注意的是,智威湯遜也可以使用公鑰/私鑰進行加密/解密。這樣做不會提供任何完整性保護或來源認證,但是,因爲擁有公鑰的任何人都可以加密。所以你可能也想簽名。在同一個jose4j頁面上的這個例子顯示了一個簽名和加密的(嵌套的)JWT: https://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples#markdown-header-producing-and-consuming-a-nested- signed-and-encrypted-jwt - 它使用EC密鑰和算法,但是也可以使用RSA來完成。 –

相關問題