关于 HTTP BASIC AUTH ,请教大家

2014-11-10 11:48:25 +08:00
 rrfeng
wikipedia 上说:
==============
这一个典型的HTTP客户端和HTTP服务器的对话,服务器安装在同一台计算机上(localhost),包含以下步骤:
客户端请求一个需要身份认证的页面,但是没有提供用户名和口令。这通常是用户在地址栏输入一个URL,或是打开了一个指向该页面的链接。
服务端响应一个401应答码,并提供一个认证域。
接到应答后,客户端显示该认证域(通常是所访问的计算机或系统的描述)给用户并提示输入用户名和口令。此时用户可以选择确定或取消。
用户输入了用户名和口令后,客户端软件会在原先的请求上增加认证消息头(值是base64encode(username+":"+password)),然后重新发送再次尝试。
在本例中,服务器接受了该认证屏幕并返回了页面。如果用户凭据非法或无效,服务器可能再次返回401应答码,客户端可以再次提示用户输入口令。
注意:客户端有可能不需要用户交互,在第一次请求中就发送认证消息头。
==============

那么问题来了:
1. 假如客户端是浏览器,当认证成功之后,后续的请求还有 auth header 吗?还是保存在 cookie 里?如果没有,server 怎样判断是否同一用户?
2. 典型的程序用 httpclient 又是如何实现的?在所有请求里都添加 auth header 吗?
5224 次点击
所在节点    问与答
6 条回复
jason52
2014-11-10 11:56:58 +08:00
有啊,路由器一般不就是auth header认证嘛,http无状态,一笔就是一笔,每一笔都在header里面有个认证的变量。


是不是这样哇。。。( ⊙o⊙ )哇
sNullp
2014-11-10 11:57:38 +08:00
1. 后续的一直有 auth header
2. 这。。不就是每个里面都加 auth header
hcymk2
2014-11-10 12:02:24 +08:00
每次都有Authorization 头

如果httpclient 是指java 的apache-httpclient下面有代码。
http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientPreemptiveBasicAuthentication.java
typcn
2014-11-10 12:11:21 +08:00
1有2是

如果服务器可控的话,建议不要使用这种方式来进行认证,尽量在客户端先进行几次不可逆加密,到服务器后再进行几次,保证密码明文安全。
sNullp
2014-11-10 12:39:40 +08:00
@typcn 即便这样还是可以进行重放攻击。
使用 HTTP Digest Auth 比较靠谱
typcn
2014-11-10 13:10:06 +08:00
@sNullp 至少用户密码不会明文暴漏。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/145305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX