如何使用公钥/私钥KeyPair加密SSO令牌?

时间:2016-05-12 17:13:02

标签: java encryption

我想要做的就是使用公钥来加密令牌,以便可以使用私钥在另一端解密。

我使用以下命令创建密钥对,但现在我不确定如何在代码中加载公钥以加密令牌:

$ ssh-keygen -t rsa -b 4096

我使用哪些java库来加载密钥并使用它来加密String?除了代码示例之外,我还对任何阅读材料感兴趣,以便更好地理解和清晰。

1 个答案:

答案 0 :(得分:2)

我在Java(以及许多其他语言)中找到了一个加密uservoice/developer文档中的SSO令牌的好例子。我在Pastebin上pasted the Java code(希望uservoice不介意!),因为这里粘贴时间太长了。

<小时/> 另一方面......我建议您查看JWT令牌和OAuth以获得授权。

我建议您使用jose4j如果您的令牌是JWT并且您实际上并不想加密它,而只是签署它!

令牌并非真的需要在某些架构中加密,因为它们只会在大多数情况下显示非敏感信息(您可以访问的内容,时间,持续时间)......安全性不是使令牌难以阅读令牌,但首先让非常难以获取令牌!一旦攻击者获得对令牌的访问权限,您就无法做多,因为攻击者对使用令牌更感兴趣(除非有关于访问设备的进一步保护,否则他/她可以做到这一点)冒充他人而不是阅读任何令牌所包含的东西(可能没什么,正如我们所见)。

JWT可以是easily read,因为它们只是通过网址编码来简化传输......但是确实需要签名才能被信任,因为它们通常不会保存在授权服务器中(他们不需要,因为只有服务器可以签名,如果签名有效)......当然,只需使用HTTPS连接发送它就可以在传输层受到保护。 / p>

要在纯Java中加载RSA公钥/私钥,请参阅this question的答案。

要签名并查看JWT的签名,请在jose4j wiki中查看this page

如果您希望令牌完全保密,请使用不透明令牌,它本身并不包含任何信息,但指向令牌应该代表的实际信息,只有生成它的服务器才能访问,因此您的信息甚至不会直接暴露...不透明的令牌通常只是一个很长的UUID。

如果您有兴趣了解有关令牌和授权/身份验证的更多信息,我建议您查看Nordic APIs博客,其中包含大量文章以及指向您可以使用的优秀开源资源的链接。

免责声明:我为一家赞助Nordic API的公司工作。