浅谈认证与鉴权

2021/4/28 10:28:35

本文主要是介绍浅谈认证与鉴权,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 认证

认证一般用于对用户身份进行鉴别,判断其是否允许进行系统后续的操作。

1.1 Basic 认证(基本认证)

  它应该是所有认证中最简单的一种方式了,注意利用用户的信息进行简单的编码来通讯。它在Http报文头中具有如下的格式:
    WWW-Authenticate: Basic realm="aGVsbG86d29ybGQ="        说明: 这里的用户名:密码为(hello:world)
    其中计算方式为:
    Base64(username:password)
  特点:
    1. 密码在通讯中传输;
    2. 加密方法也很低级, 容易被破解;

1.2 Digest认证(摘要认证)

  它是Basic认证的升级版,其格式如下所示:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Digest
    realm="testrealm@host.com",
    qop="auth,auth-int",
    nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
    opaque="5ccc069c403ebaf9f0171e9517f40e41"
    
    Authorization: Digest
    username="Mufasa",                                                     //客户端已知信息
    realm="testrealm@host.com",                                         //服务器端质询响应信息
    nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",                            //服务器端质询响应信息
    uri="/dir/index.html",                                                //客户端已知信息
    qop=auth,                                                            //服务器端质询响应信息
    nc=00000001,                                                        //客户端计算出的信息
    cnonce="0a4f113b",                                                    //客户端计算出的客户端nonce
    response="6629fae49393a05397450978507c4ef1",                        //最终的摘要信息 ha3
    opaque="5ccc069c403ebaf9f0171e9517f40e41"                            //服务器端质询响应信息
    
    response的计算应用到了realm、qop、nonce、opaqua、uri等要素,具体的计算方式可参考其他文章详细介绍
  
  特点:
    1. 它融合了服务端、客户端的随机数,因此生成的response具备变化性;
    2. 它利用随机数及nc可以减少防止重放攻击;
    3. 加密方式比较固定, 因此也存在一定的风险;

1.3 WSSE认证

  个人觉得它属于另外一种摘要认证形式,当然是要的算法及计算材料不一样, 以下为其报文格式:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: WSSE
    realm="testrealm@host.com",
    profile="UsernameToken"                                                //服务器期望你用UsernameToken规则生成回应

    Authorization: WSSE profile="UsernameToken"
    X-WSSE:UsernameToken
    username="Mufasa",
    PasswordDigest="Z2Y......",
    Nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
    Created="2010-01-01T09:00:00Z"

    UsernameToken规则为: 客户端生成一个nonce,然后根据该nonce,密码和当前日时来算出哈希值。
  特点:
    1. 服务端并没有给他返回nonce随机值;
    2. 算法还利用了时间参与计算,具备更高的变化性;
    3. 实际应用中为了有效防止重放攻击,server端会要求客户端同步自己的时间, 同时可以利用时间的有效性区间来判断摘要的有效性;

1.4 Ak/Sk认证

它是双端了解秘密,然后使用一种约定的算法进行摘要计算;

1.5 OAuth2认证

一种用于使用第三方平台账户登陆的认证方式。

2 鉴权

一般认证通过之后,用户可以发起对资源的访问。服务端可以使用session或者token的方式对后续用户请求进行鉴别,以判断是否具备访问该资源的权限。这在以微服务为设计思想的设计中应用较为广泛。

session方式是让服务端保存着用户端的状态信息,同时以cookie将该session标记设置回给用户,后续用户再访问时携带该session标记,服务端检查session标记是否有效来决定请求的处理;

token方式是指服务端以客户的用户名、密码等信息计算出一个字符串,称为token,并返回给用户,服务端不保存该字符串。用户在后续的请求中携带该token发送请求,服务端收到请求后,再次利用用户名、密码等其他材料计算一遍,判断携带的token是否与计算的一样,以判断是否处理该请求。广为人知的token认证的方法有JWT。

toekn值的状态有强动态和弱动态之分,强动态是指每个请求都发生变化,这时候token的计算只能依赖复杂的算法,再加上一些随机的算法材料来保障不被破解。有时会以摘要认证机制或者WSSE认证机制进行传递token,服务端及客户端分别使用同样的算法计算token,服务端进行比较和验证。弱动态token是指在一定时间内该token是不会变化的,超过时间之后token需要刷新或者由用户重新登陆,一般用于用户的登录后的一段时间内免登陆操作。token有时也会存储在服务端,有时存储的是用于计算token的材料,这些有点像自建的session行为。

3 说明

本文属于知识个人总结,欢迎指正。



这篇关于浅谈认证与鉴权的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程