我正在尝试第一次创建RestApi。在线阅读文本后寻求帮助。
我的要求是,我想创建一个具有用户名和密码的rest api。密码将采用加密格式。因此,当此api客户端将请求Web服务器时,该密码将首先在服务器端解密,然后如果用户名和密码进行身份验证,则它将发回一个具有到期日期的临时令牌。然后,该令牌将在rest api中用于以xml格式从Web服务器请求数据。
我们如何实现这一目标?
我还想了解我们是否在客户端服务器中加密密码,然后在Web服务器端如何解密。在发出请求时,同一个实例是从客户端传送到Web服务器端吗?
其次,我试图从Web服务器消费的数据是在网站上注册的用户的电子邮件ID。我的问题,如果用户在网站上注册,那么网站必须在数据库中的某个地方存储这些电子邮件ID吗?我的restApi将访问Web服务器端的代码,该代码负责以xml格式从数据库获取电子邮件ID。我的理解是否正确?
答案 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框架来实现此要求。