繁体   English   中英

使用令牌身份验证创建restapi

[英]create restapi with token authentication

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

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

我们怎样才能做到这一点?

而且我还想了解我们是否在客户端服务器中对密码进行加密,然后如何在Web服务器端对其进行解密。 发出请求时,同一实例是否从客户端传播到Web服务器端?

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

首先,不要直接在客户端加密细节并在服务器端解密细节。 如果您正在使用TLS / HTTPS( 应该使用 ),那么一切都很好,所有内容均已加密。

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

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

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

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

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

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

OAuth 2.0定义了4个角色:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM