一、HTTP认证介绍和认证方式
HTTP认证是一种用于保护Web应用程序的一种身份验证机制。它通过在HTTP请求的头部添加认证信息,来验证用户的身份和权限。HTTP认证可以用于保护敏感信息,限制访问某些资源,或者在访问某些操作之前要求用户提供凭据。
HTTP认证有几种不同的认证方式,包括:
-
Basic认证:Basic认证是最常见的HTTP认证方式之一。在Basic认证中,客户端发送请求时,会在请求头中包含一个"Authorization"字段,该字段包含了经过Base64编码的用户名和密码。服务器收到请求后,会解码该字段并验证用户名和密码是否正确。
-
Digest认证:Digest认证是一种更安全的认证方式。在Digest认证中,服务器会向客户端发送一个随机数(称为"nonce"),客户端根据该随机数和用户密码计算一个摘要,并将其发送给服务器。服务器收到摘要后,会验证其有效性。Digest认证相对于Basic认证而言,更难以被中间人攻击截获密码。
-
Bearer认证:Bearer认证是一种使用令牌(Token)进行身份验证的方式。在Bearer认证中,客户端在请求头中添加一个"Authorization"字段,该字段包含了一个令牌信息。服务器在接收到请求后,会验证令牌的有效性,并根据令牌来识别用户身份。
-
OAuth认证:OAuth认证是一种开放标准的身份验证协议,用于授权第三方应用程序访问用户资源。在OAuth认证中,用户可以通过授权服务器授权第三方应用程序访问自己的资源。这种方式可以避免用户将密码直接提供给第三方应用程序。
这些认证方式可以根据具体的需求和安全要求来选择使用。每种认证方式都有其优缺点,需要根据实际情况进行选择和配置。
注意:可借助最新的Postman查看当前有哪些认证方式。
参考资料
digest认证中相关参数含义
- WWW-Authentication:用来定义使用何种方式(Basic、Digest、Bearer等)去进行认证以获取受保护的资源
- realm:表示Web服务器中受保护文档的安全域(比如公司财务信息域和公司员工信息域),用来指示需要哪个域的用户名和密码
- qop:保护质量,包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略,(可以为空,但是)不推荐为空值
- nonce:服务端向客户端发送质询时附带的一个随机数,这个数会经常发生变化。客户端计算密码摘要时将其附加上去,使得多次生成同一用户的密码摘要各不相同,用来防止重放攻击
- nc:nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量。例如,在响应的第一个请求中,客户端将发送“nc=00000001”。这个指示值的目的是让服务器保持这个计数器的一个副本,以便检测重复的请求
- cnonce:客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护
- response:这是由用户代理软件计算出的一个字符串,以证明用户知道口令
- Authorization-Info:用于返回一些与授权会话相关的附加信息
- nextnonce:下一个服务端随机数,使客户端可以预先发送正确的摘要
- rspauth:响应摘要,用于客户端对服务端进行认证
- stale:当密码摘要使用的随机数过期时,服务器可以返回一个附带有新随机数的401响应,并指定stale=true,表示服务器在告知客户端用新的随机数来重试,而不再要求用户重新输入用户名和密码了
二、windows 搭建http服务器并设置摘要认证
要在Windows上搭建HTTP服务器并设置摘要认证,您可以使用以下步骤:
-
安装HTTP服务器软件:您可以选择使用XAMPP、WAMP、EasyPHP或Uniform Server等常用的服务器软件。这些软件都包括了Apache Web服务器、PHP解释器和MySQL数据库等组件,可以方便地在Windows上搭建一个PHP网站。
-
配置HTTP服务器:打开HTTP服务器软件的配置文件,找到HTTP服务器的配置选项。您需要启用“mod_auth_digest”模块,并设置摘要认证的相关参数,如认证域、认证用户名和密码等。
-
创建认证用户:在HTTP服务器的配置文件中,您需要指定哪些用户可以访问您的网站。您需要创建一个或多个用户,并为每个用户设置一个用户名和密码。
-
测试HTTP摘要认证:使用浏览器或HTTP客户端工具,向您的HTTP服务器发送一个HTTP请求。您应该会收到一个401未经授权的错误响应。在请求中包含一个“Authorization”头,该头包含一个摘要认证的用户名和密码。如果您输入了正确的用户名和密码,您应该能够成功访问您的网站。
请注意,HTTP摘要认证并不是最安全的身份验证机制,因为它仍然容易受到中间人攻击和重放攻击的影响。如果您需要更高级别的安全性,建议使用HTTPS和基本身份验证等更安全的身份验证方法。
Z-WAMP或者XAMPP下载地址
你可以通过以下链接下载Z-WAMP或XAMPP:
Z-WAMP下载地址:https://www.z-wamp.com/en/download-z-wamp
XAMPP下载地址:https://www.apachefriends.org/download.html
XAMPP配置和使用详细步骤
XAMPP是一个免费的、易于安装和使用的服务器集成软件包,它包含Apache、MySQL、PHP和Perl等常用的Web开发工具。以下是XAMPP的配置和使用详细步骤:
-
下载XAMPP
在Apache Friends的官方网站(https://www.apachefriends.org/zh_cn/index.html)下载XAMPP安装包。 -
安装XAMPP
双击下载好的XAMPP安装包进行安装。在安装过程中,你可以选择安装哪些组件,这取决于你个人的需求。通常情况下,建议选择默认安装选项。 -
启动XAMPP
安装完成后,启动XAMPP控制面板,点击"Start"按钮启动Apache和MySQL服务。 -
测试XAMPP
打开浏览器,输入http://localhost/,如果看到"XAMPP for Windows"的欢迎页面,则说明XAMPP已经安装成功。 -
配置XAMPP
如果需要修改Apache或MySQL的配置,可以在XAMPP控制面板中点击"Config"按钮进行修改。例如,你可以通过修改httpd.conf文件来修改Apache的设置。 -
创建网站
在XAMPP的安装目录下,有一个htdocs文件夹,你可以在此文件夹下创建自己的网站。例如,你可以在htdocs文件夹下创建一个名为"mywebsite"的文件夹,并在其中放置自己的网站文件。 -
访问网站
在浏览器中输入http://localhost/mywebsite/,即可访问自己的网站。
总之,XAMPP是一个非常方便的服务器集成软件包,可以帮助你快速搭建并测试自己的网站。
XAMPP配置使用摘要认证
XAMPP是一个方便快捷的集成开发环境,包含Apache、MySQL、PHP和Perl等服务。要在XAMPP上配置使用摘要认证,需要做以下几个步骤:
-
打开XAMPP控制面板,启动Apache服务。
-
打开Apache配置文件httpd.conf,可以在XAMPP控制面板中点击Apache的Config按钮,再选择Apache(httpd.conf)来打开该文件。
-
找到以下几行代码:
#LoadModule auth_digest_module modules/mod_auth_digest.so #LoadModule authn_file_module modules/mod_authn_file.so
将这两行代码的注释去掉,即将#号删除,使其变为以下形式:
LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so
这样就加载了Apache的摘要认证模块。
-
在httpd.conf中添加以下代码:(测试单配这里不行,又配置了 httpd-xampp.conf )
# 目录 <Directory "/secure"> AuthType Digest AuthName "Protected Area" AuthDigestDomain /secure/ AuthDigestProvider file AuthUserFile "/xampp/htdocs/digest/password/.htdigest" Require valid-user </Directory> # 文件 <Location "/digest/testfile1"> AuthType Digest AuthName "Protected Area" AuthDigestDomain /digest/testfile1 AuthDigestProvider file AuthUserFile "/xampp/htdocs/digest/password/.htdigest" Require valid-user </Location> # digest 这种没有生效 <Files "/digest/testfile2"> AuthType Digest AuthName "Protected Area" AuthDigestDomain /digest/testfile2 AuthDigestProvider file AuthUserFile "/xampp/htdocs/digest/password/.htdigest" Require valid-user </Files>
注意:要有对应文件和目录。
其中,/secure 为要保护的目录路径,AuthName为认证区域的名称,AuthDigestDomain定义了哪个域名下的请求需要进行认证,AuthDigestProvider指定了认证方式,此处为文件认证,AuthUserFile指定了密码文件的路径,Require valid-user表示只有通过认证的用户才能访问该目录。
总结起来,Directory指令用于配置特定目录中的身份认证,Location指令用于配置特定URL路径的身份认证,而Files指令用于配置特定文件的身份认证。
-
在httpd-xampp.conf文件中添加以下配置:后来验证不需要
<Location "/secure"> AuthType Digest AuthName "Protected Area" AuthDigestDomain /secure/ AuthDigestProvider file AuthUserFile "/xampp/htdocs/digest/password/.htdigest" Require valid-user </Location>
其中,/secure是您要保护的目录路径,可以根据需要进行修改。AuthName是认证提示信息,可以根据需要进行修改。AuthUserFile是存储用户信息的文件路径,这里使用了XAMPP默认的文件路径。
-
创建密码文件。可以使用htdigest工具创建密码文件,命令如下:(htdigest 在安装路径 D:\xampp\apache\bin)
htdigest -c D:\xampp\htdocs\digest\password\.htdigest "Protected Area" admin
其中,D:\xampp\htdocs\digest\password.htdigest为密码文件路径,"Protected Area"为认证区域名称,username为要添加的用户名,执行命令后会提示输入密码。
-
重新启动Apache服务,访问被保护的目录时会弹出认证窗口,输入用户名和密码即可访问。
测试
方式一:浏览器访问下面地址,弹窗提示输入用户名和密码即表示生效:(可wireshark抓包)
http://localhost:8088/secure/
方式二:Postman访问
方式三:curl --digest -u admin:admin http://localhost:8088/secure/