2016-05-12 66 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来完成。 –

相关问题