Java 访问受OAuth安全保护的Rest服务的最佳方式是什么?

Java 访问受OAuth安全保护的Rest服务的最佳方式是什么?,java,rest,spring-mvc,oauth,resttemplate,Java,Rest,Spring Mvc,Oauth,Resttemplate,我想访问其他供应商编写的RESTWeb服务。但问题是OAuth的安全性。我从他们那里得到了用户名、密码、用户密钥和用户机密 首先,我调用一个服务来获取刷新令牌。这就是答案 { "scope": "PRODUCTION", "token_type": "bearer", "expires_in": 3148, "refresh_token": "315381713fc905a8c5f586d5145bd84", "access_token": "46ed281862d

我想访问其他供应商编写的RESTWeb服务。但问题是OAuth的安全性。我从他们那里得到了用户名、密码、用户密钥和用户机密

首先,我调用一个服务来获取刷新令牌。这就是答案

{
   "scope": "PRODUCTION",
   "token_type": "bearer",
   "expires_in": 3148,
   "refresh_token": "315381713fc905a8c5f586d5145bd84",
   "access_token": "46ed281862dc48d2d46372fc2e84e5"
}
已获取过期时间为的刷新\u令牌。我必须将此令牌保留在数据库或内存中,直到其过期,并且仅在该刷新令牌过期后再次调用此服务以获取刷新令牌


我不知道如何保持刷新并访问我身边的令牌(数据库或内存)。请帮助我找到一种更好的方式来访问此服务。

在大多数情况下,您希望保持访问和刷新令牌的时间比您的应用程序进程长。换句话说,您不想再次进行身份验证。这就是为什么将令牌保存在持久性存储(DB、文件等)中会更好

您可以使用现有的oAuth Java客户端来简化代码。一些流行的例子有:

  • 在oAuth官方网站上

oAuth结果似乎是来自oAuth服务器的标准JSON结果。因此,配置其中一个LIB不会产生任何问题。

在大多数情况下,您希望保持访问和刷新令牌的时间比应用程序进程长。换句话说,您不想再次进行身份验证。这就是为什么将令牌保存在持久性存储(DB、文件等)中会更好

您可以使用现有的oAuth Java客户端来简化代码。一些流行的例子有:

  • 在oAuth官方网站上

oAuth结果似乎是来自oAuth服务器的标准JSON结果。因此,配置其中一个LIB不会引起任何问题。

访问和刷新令牌不应公开发布。它们是你的“秘密钥匙”。很好,您没有提供“生产”API端点:)是的。这些代币不是真的。我编辑它们并在这里发布。访问和刷新令牌不应该公开发布。它们是你的“秘密钥匙”。很好,您没有提供“生产”API端点:)是的。这些代币不是真的。我编辑它们并在这里发布。是否有任何标准的过程来处理它们,如加密后的存储数据库,以及识别令牌是否过期的最佳方法是什么(调用服务或在“时间限制”中比较“expires\u)?不,没有“标准过程”。和往常一样,这取决于你的背景。但无论如何,在大多数情况下,您都希望在应用程序重新启动时将它们持久化。所以,一个好的选择是将其持久化到数据库、中间件(可能是缓存层)或某个临时文件中,但将其读出到内存中以提高性能。关于你的第二个问题。您可以通过检查周期来请求在访问令牌到期之前更新它,也可以在oAuth服务器的第一次错误响应时进行更新。@samithkumarasingha,如果您想了解这些详细信息,我强烈建议您使用现有库。因为,我的答案中的这些都是自动为您完成的,您可以专注于您的业务逻辑。此外,还需要考虑一些安全漏洞,如在从Web客户端获取请求令牌时设置随机字符串等。否则,MiM攻击是可能的。是否有任何标准程序来处理它们,如加密后的存储DB,以及识别令牌是否到期的最佳方法是什么?(调用服务或在“时间限制”中比较“expires\u)?不,没有“标准过程”。一如既往,这取决于您的上下文。但无论如何,在大多数情况下,您希望在应用程序重新启动时将它们持久化。因此,一个好的选择是将其持久化到DB中的中间件中(可能是缓存层)或者一些临时文件,但为了性能,请将其读入内存。关于第二个问题,您可以通过检查句点来请求在访问令牌到期之前更新它,或者您可以在oAuth服务器的第一次错误响应时这样做。@samithkumarasingha,如果您想了解这些详细信息,我强烈建议您使用exis因为我的答案中的那些都是自动为你做的,你可以专注于你的业务逻辑。此外,你还需要考虑一些安全漏洞,比如在从Web客户端获取请求令牌时设置随机字符串等。否则,MiM攻击是可能的。