【发布时间】:2018-05-27 02:37:04
【问题描述】:
我正在为一个完全依赖于这个 API 的应用程序构建一个 REST API(意味着根本没有前端)。所以我发现自己在两点上苦苦挣扎:
1.如何使用 REST 实现身份验证/注册并执行需要身份验证的操作?
嗯,我知道像 Instagram 这样的应用程序有一个特殊的页面,用户可以在其中生成 access_token 并不受限制地使用 Instagram API(需要身份验证)。但就我而言,我所能做的就是创建一个这样的 REST 请求
?action=generateToken&userName=someName&password=somePassword
如果用户名和密码正确,我想得到 access_token 作为响应。 在这里注册也是一样
?action=register&userName=someName&password=somePassword
在这里我收到问候消息和 access_token
问题是我应该如何使用这些令牌存储、生成、刷新、操作?我应该有一个单独的数据库,其中存储令牌本身和相关的用户(ID)吗?当然,我应该在 N 分钟后删除这些令牌。我应该将令牌存储多长时间?否则,任何以某种方式窃取令牌的人都可以访问所有用户的功能。我该怎么做?
如果我做对了,任何需要用户识别的操作都可以这样完成
?action=sendMessage&access_token=someToken&recipientId=100&message=TestAuthOut!
其中 access_token 是生成的令牌
2。如何形成一个以对象数组作为输入的 REST 请求? 我的意思是执行如下操作:
?action=createNewVetClinic&vetClinicName=someName&doctors={doctor1: name = "doctor1", occupation="surgeon", salary=100}, {doctor2: name = "doctor2", occupation="dentist", salary=80}
是否可以创建这样的请求?我知道非常菜鸟的问题,但无论如何
【问题讨论】:
-
不要在 GET 请求的 URL 参数中包含凭据。
-
令牌有两种——访问令牌和会话令牌。访问令牌不应过期 - 用户应进行身份验证并请求令牌;然后,该令牌应至少作为标头包含在每个请求中。将凭据作为 URL 参数发送是一个坏主意。在理想情况下,身份验证是通过客户端证书进行的——TLS 本身处理身份验证的方式。 REST 应用程序应该是无状态的,因此不应使用会话令牌。
-
进一步
?action=XXX不是 REST - 它是“J. Doe 的神奇 API”。 REST 需要映射到资源的 URL 和 HTTP 动词来执行操作,例如GET /token将创建一个令牌,DELETE /token将使令牌无效。 -
最后一个问题是
PUT /vet-clinic,请求正文中有诊所的 JSON 定义。
标签: java rest api spring-mvc spring-security