使用令牌身份验证创建restapi

时间:2017-09-09 04:01:55

标签: java rest authentication encryption cryptography

我正在尝试第一次创建RestApi。在线阅读文本后寻求帮助。

我的要求是,我想创建一个具有用户名和密码的rest api。密码将采用加密格式。因此,当此api客户端将请求Web服务器时,该密码将首先在服务器端解密,然后如果用户名和密码进行身份验证,则它将发回一个具有到期日期的临时令牌。然后,该令牌将在rest api中用于以xml格式从Web服务器请求数据。

我们如何实现这一目标?

我还想了解我们是否在客户端服务器中加密密码,然后在Web服务器端如何解密。在发出请求时,同一个实例是从客户端传送到Web服务器端吗?

其次,我试图从Web服务器消费的数据是在网站上注册的用户的电子邮件ID。我的问题,如果用户在网站上注册,那么网站必须在数据库中的某个地方存储这些电子邮件ID吗?我的restApi将访问Web服务器端的代码,该代码负责以xml格式从数据库获取电子邮件ID。我的理解是否正确?

2 个答案:

答案 0 :(得分:0)

首先,不要直接关注加密客户端的详细信息并将其解密为服务器端。如果您使用TLS / HTTPS(应该),那么一切都很好,一切都已加密。

令牌生成稍微困难但仍然很容易。一种常用且易于实现的方法是使用JWT令牌。一般的想法是您创建一个JSON对象,如下所示:

{ "userID": "FC5A47CC", "expiry": "12/10/2017" }

然后使用只有您的服务器知道的密钥通过HMAC运行它。使用base64编码将HMAC的结果附加到JSON对象,然后在登录后将其发送到客户端。

使用此方法,身份验证非常快,因为您的Web服务器不需要向数据库服务器发出任何请求以确定令牌是否有效。您可以阅读有关JWT here的更多信息。我已经更详细地回答了类似的问题here

正如您的问题所示,这些用户ID显然需要存储在您的数据库中。

答案 1 :(得分:0)

好像您希望客户端应用代表用户使用资源。我建议使用OAuth 2.0,它提供了一种机制,您已经描述了访问受保护资源而不存储密码的机制。客户端应用程序从用户请求用户名和密码(例如,使用登录表单),然后将该凭据发送到服务器。收到并验证后,服务器将令牌返回给客户端。客户端在本地存储令牌并丢弃用户名和密码。所有后续请求都由令牌授权,这可以使用自定义HTTP头完成,例如X-Auth-Token。服务器可以选择性地提供刷新令牌以及访问令牌,一旦当前过期,客户端将使用该令牌来获取新的访问令牌。 OAuth 2.0需要HTTPS / SSL技术,因此有线数据将被加密。

OAuth 2.0定义了4个角色:

1)授权服务器 - 进行身份验证并向客户端应用授予令牌。 2)资源服务器 - 托管实际受保护用户资源的服务器。 3)资源所有者 - 用户愿意提供对其受保护资源的访问。 4)客户端 - 可以访问用户资源的应用程序。

您可以使用Spring Security OAuth框架来实现此要求。