java使用会话检查客户端是否在RESTAPI中经过身份验证
我正在实现一个带有身份验证的RESTAPI。我想知道这两种身份验证解决方案中哪一种更有意义:
1)让每个方法在每次调用时进行身份验证
输入api/endpoint/retrieveshoes
{
"username":"gingo",
"password":"124",
"shoes_type":"A"
}
2)有一个单独的登录方法,并将会话用于其他方法,以确保客户端经过身份验证
输入api/端点/登录
{
"username":"gingo",
"password":"124"
}
输入api/endpoint/retrieveshoes
{
"username":"gingo"
}
如果我没有先登录就调用retrieveshoes,我将收到消息“无效会话”
在解决方案(1)中,我必须在每次调用retrieveshoes时重复身份验证
但我想知道,即使我使用HTTPS,使用案例(2)中的会话是否安全。两种解决方案中哪一种安全有效?你知道第三个吗
# 1 楼答案
代替默认的HTTP(S)会话,您可能需要考虑使用具有一定空闲到期时间的身份验证令牌。这个令牌可以通过发送一个带有用户名和密码的请求(比如)到
/endpoint/login
来生成。然后,所有后续请求都可以发送该令牌进行身份验证。为了使其更加安全,您可能需要将用户的IP绑定到令牌。尽管如此,这也有一些缺点,例如同一网络上具有相同公共地址的任何人都可以使用该令牌,或者如果用户更改了网络,他/她可能需要再次登录