如果您只使用服务器在初始身份验证时提供的一个令牌,则如果它被拦截,它可以用于任何请求。您唯一的防御是到期时间。
除此之外,这取决于您的实施选项是什么。
一个更安全的系统是为每个请求添加一个时间戳(可能还有一个随机数),对其进行签名,并将其包含在每个请求中。它要求客户端处理身份验证凭据,了解签名实现并对每个请求进行签名。
您可以交替地让服务器对每个请求进行身份验证(可以使用 OpenID 完成),或者分发一些令牌并在需要更多令牌时重新进行身份验证(可以使用 OAuth 完成)。如果客户端可以存储凭据,则这些对用户来说是不可见的。这些更复杂,需要加密传输(例如 SSL)用于某些交互,以及可以说出 HTTP 重定向并处理 cookie 或其他存储状态的客户端。客户端不必知道如何签名,但如果您可以使用 SSL,您可能一开始就不需要复杂性。
如果您不需要与客户端无关,您可能想要签署请求。
对于签署实施、示例和库,请查看 Amazon Web Services、OpenID 或 OAuth。
Regarding the token expiration time, it depends on your needs. A longer token life increases the window replay attacks. A nonce makes a token single-use, but requires more state on the server.