翔云

Just try, don't shy. 最新文章请点击
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

HTTP 认证方式

Posted on 2024-01-20 12:26  翔云123456  阅读(48)  评论(0编辑  收藏  举报

本文主要介绍HTTP 认证方式有哪些及在Python中的基本使用方式。

1.HTTP认证方式

HTTP认证方式主要有以下几种:

  1. 基本认证(Basic Authentication):客户端将用户名和密码进行Base64编码后发送给服务器,服务器解码后进行验证。这种方式简单但不安全,因为Base64编码是可逆的。
  2. 摘要认证(Digest Authentication):相比基本认证,摘要认证更安全一些,它通过对信息进行哈希处理,避免了密码在网络中明文传输。
  3. 令牌认证(Token Authentication):客户端使用用户名和密码从认证服务器获取令牌,然后使用该令牌进行操作。服务器只验证令牌的合法性。
  4. OAuth:这是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的信息,而无需将用户名和密码提供给第三方应用。
  5. JWT(JSON Web Token):JWT是一种基于Token的认证方式,它将用户信息加密到Token中,服务器通过解密Token来验证用户身份。
  6. OpenID:这是一种去中心化的认证方式,用户可以选择信任的OpenID提供商,然后使用已经认证的OpenID在任何支持OpenID的网站进行登录。

以上就是HTTP的一些常见认证方式,每种方式都有其适用的场景和优缺点。

2.Python中 HTTP 认证方式的使用

在Python中,我们可以使用requests库来进行HTTP请求,它支持多种HTTP认证方式。以下是一些示例:

  1. 基本认证(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'))

  1. 摘要认证(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'))
  1. 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认证方式的验证方法:

  1. 基本认证(Basic Authentication):服务器会从请求头中获取Authorization字段,该字段的值是"Basic"后跟一个Base64编码的字符串,字符串是用户名和密码用冒号连接的形式。服务器需要解码这个字符串,然后验证用户名和密码。
  2. 摘要认证(Digest Authentication):服务器会发送一个包含nonce值的401响应,客户端使用这个nonce值、密码、HTTP方法和请求的URI生成一个响应值,然后将这个响应值发送给服务器。服务器会使用同样的信息生成自己的响应值,然后比较两个响应值是否相同,以此来验证客户端的身份。
  3. 令牌认证(Token Authentication):客户端将令牌放在请求头的Authorization字段中发送给服务器,服务器需要验证这个令牌的有效性。
  4. OAuth:客户端将包含访问令牌的Authorization字段发送给服务器,服务器需要验证这个访问令牌的有效性。

以上是一些常见的HTTP认证方式的验证方法,具体的实现会依赖于你使用的Web框架或者库。例如,如果你使用Flask框架,你可以使用flask_httpauth库来方便地实现HTTP认证。