本文主要介绍HTTP 认证方式有哪些及在Python中的基本使用方式。
1.HTTP认证方式
HTTP认证方式主要有以下几种:
- 基本认证(Basic Authentication):客户端将用户名和密码进行Base64编码后发送给服务器,服务器解码后进行验证。这种方式简单但不安全,因为Base64编码是可逆的。
- 摘要认证(Digest Authentication):相比基本认证,摘要认证更安全一些,它通过对信息进行哈希处理,避免了密码在网络中明文传输。
- 令牌认证(Token Authentication):客户端使用用户名和密码从认证服务器获取令牌,然后使用该令牌进行操作。服务器只验证令牌的合法性。
- OAuth:这是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的信息,而无需将用户名和密码提供给第三方应用。
- JWT(JSON Web Token):JWT是一种基于Token的认证方式,它将用户信息加密到Token中,服务器通过解密Token来验证用户身份。
- OpenID:这是一种去中心化的认证方式,用户可以选择信任的OpenID提供商,然后使用已经认证的OpenID在任何支持OpenID的网站进行登录。
以上就是HTTP的一些常见认证方式,每种方式都有其适用的场景和优缺点。
2.Python中 HTTP 认证方式的使用
在Python中,我们可以使用requests库来进行HTTP请求,它支持多种HTTP认证方式。以下是一些示例:
- 基本认证(Basic Authentication):requests库提供了requests.auth.HTTPBasicAuth类来进行基本认证。
from requests.auth import HTTPBasicAuth
r = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
或者你可以简单地传递一个元组给auth参数,requests会默认使用HTTPBasicAuth。
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
- 摘要认证(Digest Authentication):requests库提供了requests.auth.HTTPDigestAuth类来进行摘要认证。
from requests.auth import HTTPDigestAuth
url = 'http://httpbin.org/digest-auth/auth/user/pass'
r = requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
- OAuth:可以使用requests_oauthlib库来进行OAuth认证。首先需要安装这个库(pip install requests requests_oauthlib),然后可以如下使用:
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET', 'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
r = requests.get(url, auth=auth)
4.自定义认证:requests库允许你通过继承requests.auth.AuthBase类来实现自定义认证。
from requests.auth import AuthBase
class CustomAuth(AuthBase):
def __call__(self, r):
# Implement your custom authentication here
return r
url = 'http://httpbin.org/get'
r = requests.get(url, auth=CustomAuth())
上面是HTTP客户端的使用方式,接下来看下HTTP服务器端验证方式。
在HTTP服务器端,验证客户端的认证信息通常依赖于使用的Web框架或者库。
以下是一些常见的HTTP认证方式的验证方法:
- 基本认证(Basic Authentication):服务器会从请求头中获取
Authorization
字段,该字段的值是"Basic"后跟一个Base64编码的字符串,字符串是用户名和密码用冒号连接的形式。服务器需要解码这个字符串,然后验证用户名和密码。 - 摘要认证(Digest Authentication):服务器会发送一个包含nonce值的401响应,客户端使用这个nonce值、密码、HTTP方法和请求的URI生成一个响应值,然后将这个响应值发送给服务器。服务器会使用同样的信息生成自己的响应值,然后比较两个响应值是否相同,以此来验证客户端的身份。
- 令牌认证(Token Authentication):客户端将令牌放在请求头的
Authorization
字段中发送给服务器,服务器需要验证这个令牌的有效性。 - OAuth:客户端将包含访问令牌的Authorization字段发送给服务器,服务器需要验证这个访问令牌的有效性。
以上是一些常见的HTTP认证方式的验证方法,具体的实现会依赖于你使用的Web框架或者库。例如,如果你使用Flask框架,你可以使用flask_httpauth库来方便地实现HTTP认证。
Just try, don't shy.