Java 它是否需要在任何具有基本身份验证的请求中传递用户名:密码组合?
我混淆了基本的http授权。需要使用Java 它是否需要在任何具有基本身份验证的请求中传递用户名:密码组合?,java,http,authentication,basic-authentication,Java,Http,Authentication,Basic Authentication,我混淆了基本的http授权。需要使用授权头将每个请求发送到服务器,或者只发送第一个请求,然后浏览器记住身份验证令牌,如会话id?您必须在每个请求上发送授权头。但是,例如,Chrome会记住身份验证令牌,并在每次请求时自动发送它。是的,所以当用户首次登录时,会根据一些数据验证其凭据,如果正确,则会生成身份验证令牌 Auth令牌几乎是一个自包含的实体(它存储一些用密钥签名的数据) 此令牌在客户端获取存储(通常与刷新令牌一起) 对于所有后续请求,此令牌保存在授权标头中(承载者+令牌) 当服务器接收到这
授权头将每个请求发送到服务器,或者只发送第一个请求,然后浏览器记住身份验证令牌,如会话id?您必须在每个请求上发送授权头。但是,例如,Chrome会记住身份验证令牌,并在每次请求时自动发送它。是的,所以当用户首次登录时,会根据一些数据验证其凭据,如果正确,则会生成身份验证令牌
Auth令牌几乎是一个自包含的实体(它存储一些用密钥签名的数据)
此令牌在客户端获取存储(通常与刷新令牌一起)
对于所有后续请求,此令牌保存在授权标头中(承载者+令牌)
当服务器接收到这个令牌时,它将使用密钥对其进行解密,该密钥之前用于对该令牌进行签名。并使用存储的数据
如果该身份验证令牌已过期,则刷新令牌将起作用
首先是一些链接
和jwt.io要使用基本身份验证获得令牌的感觉,每个请求都需要有一个授权HTTP头,格式如下:
Authorization: Basic <base64(username:password)>
基本身份验证是一种安全机制,因此在用户输入有效凭证后,浏览器会将其与每个页面请求一起发送
对于AJAX请求,您需要从代码中附加此标头。但是,您确实不应该使用基本身份验证来保护API,原因有很多:
您将强制客户机将这些凭证保存在代码中,这样很容易被盗李>
您必须将HTTPS与基本身份验证一起使用,因为base64编码根本不提供凭据保护李>
用户名/密码组合的有效期通常比访问令牌的有效期长得多,从而增加了它们被盗的风险
密码验证应该是一个缓慢的过程,以减轻暴力攻击,其中令牌验证只是验证数字签名
每次必须通过网络发送用户名/密码都会增加试图破坏加密的人的攻击面
更好的保护web API的替代方案是like或基于HMAC的身份验证方案like或,这取决于服务器是否具有会话持久性。这不是基本身份验证规范的一部分。是。如果未提供,浏览器将为您执行此操作。然而,它总是为每个请求传递。问题是关于基本身份验证。您的答案是关于基于令牌的身份验证。这是两件完全不同的事情。看起来你是对的,从你的回答中学到了一些东西,谢谢
WWW-Authenticate: Basic realm="myRealm"