精华内容
下载资源
问答
  • 本篇文章小编就为大家介绍一下在asp.net中几种常用身份验证方法。需要的朋友可以过来参考下,希望对大家有所帮助
  • 本文分别以ASP.NET1.1与ASP.NET2.0在Forms 身份验证上的实现方法,以及ASP.NET2.0较上一版本哪些改进或变化进行说明.相信读者都己经看过许多类似这样的文章,不伦是在网上或是某些专业书籍上,最近又模式&实践小组...
  • 权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。 一旦用户被分配了...
  • 客户端使用它支持的身份验证方法进行访问,如果服务器可以接受,则建立会话。用户凭据(用户名和密码)将发送到服务器,这些凭证可能安全,也可能不安全。实际上,服务器可能根本不需要身份验证。这...

    当Windows客户端尝试使用HTTP协议访问基于Web的资源时,会在客户端和服务器之间建立“对话”。换句话说,服务器告诉客户端,访问资源之前进行身份验证 ,并且服务器还告诉客户端哪些类型的认证机制可以接受通信。

    客户端使用它支持的身份验证方法进行访问,如果服务器可以接受,则建立会话。用户凭据(用户名和密码)将发送到服务器,这些凭证可能安全,也可能不安全。实际上,服务器可能根本不需要身份验证。这一切都取决于使用哪种方式来建立会话。

    HTTP身份验证方式:

    以下是Windows客户端最常用的身份验证方法。

    1.Anonymous

    匿名访问意味着不涉及身份验证。因此,用户无需提供用于向服务器进行身份验证的用户名和密码。 如Exchange server 外网收邮件可以配置匿名方式

    2.Basic (基本身份验证)

    基本身份验证是最不安全的身份验证,因为它允许以明文形式发送用户名和密码。此方式是不安全

    3.Digest

    摘要式身份验证优于基本身份验证,因为它使用质询 - 响应方法使黑客窃取密码或用户名变得有些困难。但是,这不是一种非常安全的方法。默认IIS已废弃次验证方法

    4.NTLM

    与摘要式身份验证相比,(NTLM)提供了更好的质询 - 响应方法。然而,这是一种过时的技术,此身份验证仅用于更安全的身份验证(如Kerberos)不可用的情况。

    5.Negotiate(协商身份验证)

    协商提供NTLM身份验证和Kerberos身份验证之间的选择。 Kerberos是一种使用相互身份验证的速度更快且非常安全的协议,因此它比NTLM更加试用。在相互身份验证中,客户端和服务器都相互进行身份验证,从而提供更高级别的安全性。

     

    配置IIS使用身份验证方法时,建议

    • 尽可能使用Kerberos身份验证

    自2000年以来,Kerberos是Windows中的默认身份验证协议,但有些情况可能需要使用NTLM身份验证。例如,如果第三方或旧版客户端不支持Kerberos,则可以使用NTLM。如果您有某些不支持Kerberos的应用程序,则可能会支持NTLM。

    • 如果您没有可用的Kerberos,如使用Basic with SSL证书加密,但不要使用不带SSL的Basic,因为它提供的安全性非常低。
    • 避免使用Digest(摘要式)身份验证。

    转载于:https://www.cnblogs.com/Aldj/p/10558781.html

    展开全文
  • Mongodb提供了一系列的 安全功能 ,这里介绍一种很常用身份验证方式。 2. 开启验证 默认情况下,只要在启动数据库的时候没有加上 –auth 选项,就是没有身份验证功能的,所有客户端都可以进行所有权限的操作。 ...
  • 常见身份验证协议

    千次阅读 2019-10-21 20:04:48
    PAP 是 PPP 协议集中的一种链路控制协议,通过2次握手建立认证,对等结点持续重复发送 ID/ 密码(明文)给验证者,直至认证得到响应或连接终止,常见于PPPOE拨号环境中。 PAP认证过程 首先被认证方向认证方发送...

       

    PAP(PasswordAuthenticationProtocol 密码认证协议)
            PAP 是 PPP 协议集中的一种链路控制协议,通过2次握手建立认证,对等结点持续重复发送 ID/ 密码(明文)给验证者,直至认证得到响应或连接终止,常见于PPPOE拨号环境中。

    PAP认证过程

            首先被认证方向认证方发送认证请求(包含用户名和密码),以明文形式进行传输,认证方接到认证请求,再根据被认证方发送来的用户名去到自己的数据库认证用户名密码是否正确,如果密码正确,PAP认证通过,如果用户名密码错误,PAP认证未通过
            PAP 并不是一种强有效的认证方法,其密码以文本格式在电路上进行发送,对于窃听、重放或重复尝试和错误攻击没有任何保护。


    CHAP (ChallengeHandshakeAuthenticationProtocol 挑战应答认证协议)
            CHAP通过三次握手验证被认证方的身份(密文),在初始链路建立时完成,为了提高安全性,在链路建立之后周期性进行验证,目前在企业网的远程接入环境中用的比较常见。

    CHAP认证过程

            链路建立阶段结束之后,认证方主动向对端点发送“challenge”消息(此认证序列号id+认证方主机名+随机数)
    对端点去到自己的数据库查到认证方主机名对应的密码,用查到的密码结合认证方发来的认证序列号id和随机数,经过单向哈希函数MD5计算出来的值做应答。
    根据被认证方发来的认证用户名,主认证方在本地数据库中查找被认证方对应的密码,结合id找到先前保存的随机数据和id根据MD5算法算出一个Hash值,与被认证方得到的Hash值做比较,如果一致,则认证通过,如果不一致,则认证不通过。
    经过一定的随机间隔,认证方发送一个新的 challenge 给端点,重复步骤 1 到 3 。

    EAP协议以及类型

            可扩展身份认证协议(Extensible Authentication Portocol,EAP)最早定义在RFC2284中,是一种支持多种认证方法的认证框架,而不是一个认证机制。EAP最初被设计用于PPP,后来被RFC 3748更新,用于基于端口的802.1X访问控制,最后又被RFC 5247所更新。

    EAP是一种非常灵活的二层协议,包括多种类型。有些EAP类型是产商私有的,有些EAP类型是标准的,如LEAP是Cisco私有的,PEAP是公有的标准。有些EAP仅能提供单向认证,而有些EAP可提供双向认证(mutual authenticaiton)。在双向认证中,不仅认证服务器需要对请求方的身份进行认证,请求方也必须对认证服务器的身份进行认证,以防止自己提供的用户名和密码被非法或假冒的认证服务器窃取。大部分要求双向认证的EAP采用服务器证书对认证服务器的身份进行验证。下表列出了各种EAP的特点和具体特性:

    表-1 EAP类型

     

    1. “弱”EAP协议

            传统的EAP类型极容易受到各种攻击,包括社会工程学和离线字典的攻击。这些传统的EAP类型是企业WLAN绝对不可能接受的解决方案,包括EAP-MD5和EAP-LEAP。

    1.1 EAP-MD5

          EAP-MD5是一种相当简单的EAP类型,很长一段时间在有线网络中用于端口认证,因此也成为第一个用于WLAN中的EAP类型。然而,由于EAP-MD5的存在几大缺点,因此在企业WALN环境中不建议EAP-MD5,这几大缺点是:

    •      单向认证: 只有请求方被认证,服务器不需要被认证。相互认证需要创建动态加密密钥,如果选择EAP-MD5为身份验证方法,则加密方法只能是静态WEP,或根本没有加密;

    •      用户名明文: 请求方的用户名总是明文可见,如果黑客知道用户的身份,黑客可以尝试使用社会工程学技术获取到密码。因此,EAP-MD5很容易受到社会工程学攻击;

    •      弱MD5哈希:请求方的密码使用MD5哈希功能,但其很容易受到各种黑客工具所破解。因此,EAP-MD5极容易受到离线字典攻击;

    下图描述了EAP-MD5的认证过程:

     

    图-1 EAP-MD5的认证过程

    1.2 EAP-LEAP

          EAP-LEAP也被简称为LEAP(Lightweight Extensible Authentication

    Protocol, 轻量级可扩展身份认证协议),是多年来被企业WLAN使用的一个非常成功的EAP类型。LEAP很容易部署,所有终端用户可使用相同的身份凭证:用户名和密码。

    与EAP-MD5不同,LEAP使用动态生成的WEP密钥对数据传输进行加密,并执行一种类型的伪双向认证,尽管许多文档声称LEAP支持双向认证。MS-CHAP和MS-CHAPv2在双向认证的过程中使用相同的密码进行哈希以认证对方,但这不是真正的双向认证。LEAP有以下几大缺点:

    •      用户名明文:请求方的用户名总是明文可见,如果黑客知道用户的身份,黑客可以尝试使用社会工程学技术获取到密码。因此,EAP-MD5很容易受到社会工程学攻击;

    •      弱MS-CHAPv2哈希:请求方的密码使用MS-CHAPv2哈希功能,但其很容易受到各种黑客工具所破解。因此,EAP-MD5极容易受到离线字典攻击;

    •      伪双向认证:LEAP使用MS-CHAPv2协议支持一种“类型”的双向认证;

          尽管LEAP可以使用强大和复杂的密码抵御攻击,但强制终端用户使用强大的密码策略是一个挑战。为了企业WLAN的安全,不建议在企业WLAN中部署使用LEAP。

    下图描述了EAP-LEAP的认证过程:

    图-2 EAP-LEAP的认证过程

     

    2. “强”EAP协议

        “强”EAP类型使用基于TLS的身份认证或TLS隧道化身份认证,与EAP-MD5/EAP-LEAP只使用一个请求方身份不同,基于隧道身份验证的EAP类型使用两个请求方身份:外层身份(outer identity)和内层身份(inner identity)。外层身份只是一个有效的虚假用户名(通常为anonymous),而内层身份是请求方的真实身份。外层身份以明文出现在加密TLS隧道外,而内层身份被TLS隧道所保护。

    注意:所有的请求方都有能力配置外层身份的虚假用户名,除了Microsoft WZC请求方。WZC请求认证时内层和外层身份都使用相同的用户名。因此,真正的用户名可见,这是为什么建议不是用Microsoft内置的WZC请求方。

     

    2.1 EAP-PEAP

            EAP-PEAP简称为PEAP(Protected Extensible Authentication Protocol,受保护的可扩展身份验证协议),其创建一个加密的TLS隧道,并在该TLS隧道内验证请求方内层身份。由于PEAP的高安全性,因此,PEAP是企业WLAN中最常用也是使用最广泛的的EAP类型。

             PEAP最开始由Csico、Microsoft、RSA、Security三家公司所联合提议,但是据报道Microsoft和Cisco没有完全同意提议的每一个细节。Microsoft实施PEAPv0使用MS-CHAPv2作为内部认证方法,MS-CHAPv2是Microsoft自由的CHAP版本,随着微软在客户端和服务器操作系统占有的统治地位,并内置支持MS-CHAPv2,因此这也导致了EA-PEAPv0(EAP-MSCHAPv2)的成功。而Cisco从原始的标准中分离出PEAPv1,其使用EAP-GTC作为内部认证方法。PEAP包括三个主要版本:

    •    EAP-PEAPv0(EAP-MSCHAPv2)

            微软的EAP-PEAPv0 (EAP-MSCHAPv2)是最常用的一种PEAP类型,使用EAP-MSCHAPv2协议作为隧道内部的认证方法,其使用用户名和密码作为用户凭证。

    •    EAP-PEAPv0(EAP-TLS)

            EAP-PEAPv0(EAP-TLS)是微软的另一种类型的PEAP,使用EAP-TLS协议作为隧道内部的认证方法,其使用客户端证书作为用户凭证。EAP-TLS也可以作为一个单独的EAP认证协议使用。

    •    EAP-PEAPv1(EAP-GTC)

           EAP-PEAPv1(EAP-GTC)是Cisco版本的一种PEAP类型,使用EAP-GTC(EAP-GenericToken Card,通用令牌卡)协议作为隧道内部的认证方法。EAP-GTC定义在RFC3748中,然后被发展成与现有的安全令牌系统提供互操作性,如RSA的SecurID解决方案的OTP。EAP-GTC方法建议使用安全令牌设备,但是其身份凭证也可以为明文的用户名和密码。因此,当EAP-GTC被用于PEAPv1的隧道中,通常其身份凭证是一个简单的明文用户名和密码。

            由于在TLS隧道中使用的PEAP内部认证协议是另一种类型的EAP,所以PEAP通常也被称为”EAP inside EAP“认证,唯一的区别就是使用在TLS隧道中的内部EAP协议不同。

            PEAP操作的关键点是建立TLS隧道,这需要一个服务器端证书(server-side certificate)。EAP-PEAP认证过程包括两个阶段,下面以EAP-PEAPv0 (EAP-MSCHAPv2) 来说明,下图描述了EAP-PEAP的认证过程:

    图-3 EAP-PEAP的认证过程

     

    注意:加密TLS隧道只会存在几毫秒,用于保护用户身份凭证,而不是用于加密802.11数据帧。

    2.2 EAP-TTLS

            EAP-TTLS(EAP-Tunneled Transport Layer Security,隧道传输层安全)由Certicom和FunkSoftware设计,定义在RFC 5281中。与PEAP一样,EAP-TTLS也使用TLS隧道保护相对不安全的内层认证方法。如下图所示,EAP-TTLS与PEAP相似,认证过程也包含两个阶段。

    图-4 EAP-TTLS的认证过程

     

    EAP-TTLS与EAP-PEAP的区别相当小,最大的不同就是EAP-TTLS支持更多的内层认证协议。EAP-TTLS支持传统的认证方法PAP、 CHAP、MS-CHAP和MS-CHAPv2,也支持使用EAP协议作为内层认证方法,支持使用客户端证书作为身份凭证,而EAP-PEAP只支持EAP协议作为内层认证方法。

             EAP-TTLS曾被广泛部署过,在许多企业WLAN中也能遇到。然而,EAP-TTLS与EAP-PEAP几乎相同,且不被Microsoft WZC所支持。因此,相对其他的EAP协议类型来说市场较小。如果不使用Microsoft WZC作为请求方,EAP-TTLS是可考虑的一种选择。

     

    2.3 EAP-TLS

            EAP-TLS(EAP-Transport Layer Security,传输层安全)定义在RFC 5216中,是使用最广泛,也是WLAN中最安全的一种EAP类型。EAP-TLS除了与EAP-PEAP和EAP-TTLS一样需要服务器端证书外,还需要客户端证书。

            部署服务器端证书并不需要太大的负担,然而为每一个客户端部署唯一的数字证书需要企业PKI基础设施,这对企业来说是一个负担。因此,除非企业已经存在PKI基础设施,否议在企业WLAN中部署EAP-TLS不是第一建议。下图描述了EAP-TLS的认证过程:

    图-5 EAP-TLS的认证过程

     

    使用客户端数字证书作为身份凭证是EAP-TTLS和EAP-PEAP的可选项,然而在TLS隧道中使用客户端证书是不必要的。因此,只建议在部署EAP-TLS时使用客户端数字证书。认证服务器配置EAP-TLS时,通常允许通过比较用户数字证书中包含的一个或多个信息来验证客户端证书,这些信息包括:

    •    证书持有者别名(Certificate Subject Alternative Name ,SAN)

    •    证书持有者通用名称(Certificate Subject Common Name ,CN)

    •    证书二进制(Certificate Binary)

    2.4 EAP-FAST

          EAP-FAST(EAP-Flexible Authentication via Secure Tunneling,基本安全隧道的灵活认证)由Cisco所开发设计,用于取代易破解的LEAP。EAP-FAST目前已经被标准化定义在RFC 4851中,并在2009年,与EAP-AKA一起加入到Wi-Fi联盟的WPA2互操作认证中。

     EAP-FAST与EAP-PEAP和EAP-TTLS一样,提供双向认证和隧道化认证。但是EAP-FAST并不使用基于X.509标准的数字证书去建立TLS隧道,而是使用PAC(Protected Authentication Credential,受保护的接入凭证)。

          PAC是一种类数字证书,实际上是一个共享密钥,主要包含以下三部分:

    •    Shared Secret—The PAC-Key:客户端与认证服务器之间的一个预共享密钥,是一个强32字节的密钥,由认证服务器随机产生,是建立TLS隧道的先期主密钥;

    •    Opaque Element—The PAC-Opaque:在隧道建立时发送给认证服务的一个可变长度的数据元素,这样认证服务器就可以解码所需的信息来验证客户端的身份;

    •    Other Information—PAC-Info:是一个可变长度的数据元素,,能够以最简洁方式的提供认证服务器或PAC发布者的身份(A-ID)。为了避免混绕,各个认证服务器的A-ID是不同的。PAC-Info还可能包括其他的有用但非强制的信息,例如,PAC-Key生存时间,也可能在PAC分发或更新时被服务器传递到申请者。

     

    以上三个部分统一构成了一个完整的PAC证书,在EAP-FAST认证之前由认证服务器一次性产生并通过安全的方式送给申请者,完成PAC的发放。

    EAP-FAST的认证过程包含3个阶段:其中阶段1是一个可选的阶段,如下图所示:

    图-6 EAP-FAST认证过程

     

    •    EAP-FAST 阶段0 —— 此阶段用于自动分发部署PAC,是一个可选的阶段,所有的PAC可以通过手动方式安装在每个客户端上。

    •    EAP-FAST 阶段1 ——  客户端请求方发送外层伪装的身份ID给认证服务器,让认证服务器知道有客户端尝试认证。客户端和认证服务器之间使用对称密钥加密进行协商,建立起一个加密的TLS隧道;

    •    EAP-FAST阶段2 ——  在加密隧道内进行客户端请求方的身份验证。EAP-FAST支持多种内层认证方法,但通常使用的内层认证协议为EAP-GTC,使用用户名和密码进行验证。

          阶段0执行的自动分发部署PAC文件是使用一个匿名的Diffie-Hellman交换,客户端仅是简单的信任提供PAC文件的。因此,EAP-FAST如果是使用自动分发部署PAC文件,很容易遭受到中间人攻击。如果不经过阶段0,则手动安装PAC文件到每个客户端上则是一件很繁重的任务,还不如使用已经被广泛部署过的EAP-TLS和EAP-PEAP。

     

    3. 其他EAP协议

          除了以上介绍的EAP协议外,还有多种其他EAP协议的存在。如EAP-POTP协议,用于移动电话产业的EAP-SIM和EAP-AKA等,这里不做详细介绍。

    展开全文
  • 身份验证

    千次阅读 多人点赞 2019-10-17 20:44:21
    传统身份验证方法 HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。 ...

    传统身份验证的方法

    HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。

     

    解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

     

    上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。

    前端退出的话就清cookie。后端强制前端重新认证的话就清或者修改session。

     

    如果是分布式部署,需要做多机共享session机制,实现方法可将session存储到数据库中或者redis中

    基于 cookie 的机制很容易被 CSRF

    存储

    session、cookie、sessionStorage、localstorage的区别

    session: 主要存放在服务器端,相对安全

    cookie: 可设置有效时间,默认是关闭浏览器后失效,主要存放在客户端,并且不是很安全,可存储大小约为4kb

    sessionStorage: 仅在当前会话下有效,关闭页面或浏览器后被清除

    localstorage: 除非被清除,否则永久保存

    基于 Token 的身份验证方法

    使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

     

    1. 客户端使用用户名跟密码请求登录
    2. 服务端收到请求,去验证用户名与密码
    3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
    4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
    5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token,放入HTTP Header中的Authorization位
    6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

    JWT,读作:jot ,表示:JSON Web Tokens 。JWT 标准的 Token 有三个部分:

    header

    payload

    signature

     

    中间用点分隔开,并且都会使用 Base64 编码,所以真正的 Token 看起来像这样:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
     

    标准

    Header

    header 部分主要是两部分内容,一个是 Token 的类型,另一个是使用的算法,比如下面类型就是 JWT,使用的算法是 HS256。

    {

      "typ": "JWT",

      "alg": "HS256"

    }

    Payload(有效载荷)

    Payload 里面是 Token 的具体内容,这些内容里面有一些是标准字段,你也可以添加其它需要的内容。下面是标准字段:

    iss:Issuer,发行者

    sub:Subject,主题

    aud:Audience,观众

    exp:Expiration time,过期时间

    nbf:Not before

    iat:Issued at,发行时间

    jti:JWT ID

    Signature

    Signature 部分其实就是对我们前面的 Header 和 Payload 部分进行签名,保证 Token 在传输的过程中没有被篡改或者损坏,签名的算法也很简单,但是,为了加密,所以除了 Header 和 Payload 之外,还多了一个密钥字段,完整算法为:

        Signature = HMACSHA256(

            base64UrlEncode(header) + "." +

            base64UrlEncode(payload),

            secret)

    这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret密钥,这个密钥被存储在服务端。

     

    使用注意

    1. payload 中不要存放敏感信息,因为可以被很容易地获取到;
    2. Token 在服务器没有存储,只能通过设置过期时间来让 Token 失效,也就是没有办法让 Token 主动失效,就没有办法做单点登录(可以考虑服务器进行存储)
    3. 保护好secret私钥,该私钥非常重要。
    4. 如果可以,请使用HTTPS协议,不!是务必使用HTTPS!

    比较

    可扩展性

    随着应用程序的扩大和用户数量的增加,你必将开始水平或垂直扩展。session数据通过文件或数据库存储在服务器的内存中。在水平扩展方案中,你必须开始复制服务器数据,你必须创建一个独立的中央session存储系统,以便所有应用程序服务器都可以访问。否则,由于session存储的缺陷,你将无法扩展应用程序。解决这个挑战的另一种方法是使用 sticky session。你还可以将session存储在磁盘上,使你的应用程序在云环境中轻松扩展。这类解决方法在现代大型应用中并没有真正发挥作用。建立和维护这种分布式系统涉及到深层次的技术知识,并随之产生更高的财务成本。在这种情况下,使用JWT是无缝的;由于基于token的身份验证是无状态的,所以不需要在session中存储用户信息。我们的应用程序可以轻松扩展,因为我们可以使用token从不同的服务器访问资源,而不用担心用户是否真的登录到某台服务器上。你也可以节省成本,因为你不需要专门的服务器来存储session。为什么?因为没有session!

    注意:如果你正在构建一个小型应用程序,这个程序完全不需要在多台服务器上扩展,并且不需要RESTful API的,那么session机制是很棒的。 如果你使用专用服务器运行像Redis那样的工具来存储session,那么session也可能会为你完美地运作!

    安全性

    JWT签名旨在防止在客户端被篡改,但也可以对其进行加密,以确保token携带的claim 非常安全。JWT主要是直接存储在web存储(本地/session存储)或cookies中。 JavaScript可以访问同一个域上的Web存储。这意味着你的JWT可能容易受到XSS(跨站脚本)攻击。恶意JavaScript嵌入在页面上,以读取和破坏Web存储的内容。事实上,很多人主张,由于XSS攻击,一些非常敏感的数据不应该存放在Web存储中。一个非常典型的例子是确保你的JWT不将过于敏感/可信的数据进行编码,例如用户的社会安全号码。

    最初,我提到JWT可以存储在cookie中。事实上,JWT在许多情况下被存储为cookie,并且cookies很容易受到CSRF(跨站请求伪造)攻击。预防CSRF攻击的许多方法之一是确保你的cookie只能由你的域访问。作为开发人员,不管是否使用JWT,确保必要的CSRF保护措施到位以避免这些攻击。

    现在,JWT和session ID也会暴露于未经防范的重放攻击。建立适合系统的重放防范技术,完全取决于开发者。解决这个问题的一个方法是确保JWT具有短期过期时间。虽然这种技术并不能完全解决问题。然而,解决这个挑战的其他替代方案是将JWT发布到特定的IP地址并使用浏览器指纹。

    注意:使用HTTPS / SSL确保你的Cookie和JWT在客户端和服务器传输期间默认加密。这有助于避免中间人攻击!

    RESTful API服务

    现代应用程序的常见模式是从RESTful API查询使用JSON数据。目前大多数应用程序都有RESTful API供其他开发人员或应用程序使用。由API提供的数据具有几个明显的优点,其中之一就是这些数据可以被多个应用程序使用。在这种情况下,传统的使用session和Cookie的方法在用户认证方面效果不佳,因为它们将状态引入到应用程序中。

    RESTful API的原则之一是它应该是无状态的,这意味着当发出请求时,总会返回带有参数的响应,不会产生附加影响。用户的认证状态引入这种附加影响,这破坏了这一原则。保持API无状态,不产生附加影响,意味着维护和调试变得更加容易。

    另一个挑战是,由一个服务器提供API,而实际应用程序从另一个服务器调用它的模式是很常见的。为了实现这一点,我们需要启用跨域资源共享(CORS)。Cookie只能用于其发起的域,相对于应用程序,对不同域的API来说,帮助不大。在这种情况下使用JWT进行身份验证可以确保RESTful API是无状态的,你也不用担心API或应用程序由谁提供服务。

    性能

    当从客户端向服务器发出请求时,如果大量数据在JWT内进行编码,则每个HTTP请求都会产生大量的开销。编码时,JWT的大小将是SESSION ID(标识符)的几倍,从而在每个HTTP请求中,JWT比SESSION ID增加更多的开销。

     

    实效性

    JWT是一种无状态身份验证机制,因为用户状态永远不会保存在服务器内存中。 由于JWT是独立的,所有必要的信息都在那里,所以减少了多次查询数据库的需求。

     

    此外,无状态JWT的实效性相比session太差,只有等到过期才可销毁,而session则可手动销毁。

    例如有个这种场景,如果JWT中存储有权限相关信息,比如当前角色为 admin,但是由于JWT所有者滥用自身权利,高级管理员将权利滥用者的角色降为 user。但是由于 JWT 无法实时刷新,必需要等到 JWT 过期,强制重新登录时,高级管理员的设置才能生效。

    或者是用户发现账号被异地登录,然后修改密码,此时token还未过期,异地的账号一样可以进行操作包括修改密码。

    但这种场景也不是没有办法解决,解决办法就是将JWT生成的token存入到redis或者数据库中,当用户登出或作出其他想要让token失效的举动,可通过删除token在数据库或者redis里面的对应关系来解决这个问题。

     

     

     

    展开全文
  • Windows身份验证提供程序: ...使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。 Passport 身份验

    Windows身份验证提供程序:

    提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合使用来确保 ASP.NET 应用程序安全的信息。

    Forms 身份验证提供程序 :

    提供有关如何使用您自己的代码创建应用程序特定的登录窗体并执行身份验证的信息。使用 Forms 身份验证的一种简便方法是使用 ASP.NET 成员资格和 ASP.NET 登录控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。

    Passport 身份验证提供程序 :

    提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登录和核心配置

    展开全文
  • 常见加密算法及身份验证协议探究 加密 对称加密 非对称加密 HASH 公共密钥体系 证书服务器的安装和配置及SSL的应用 身份验证 身份验证方法 智能卡身份验证 NTLM和Kerberos
  • 游戏中会遇到很多的小问题,可能大家都还不清楚怎么解决吧,今天小编给大家带来帝国时代2决定版常见问题解决方法介绍,一起来看一下吧。 常见问题解决方法介绍如图,是不是排第一的那个无法取消。建筑无法取消?另外...
  • LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory ... 有时,由于实现和集成过程中会遇到各种问题, 并且没有进行LDAP身份验证的标准方法,因此此简单任务会变得棘手。 Ja...
  • 根据业务需求,开发人员需要为其应用程序选择最合适的身份验证方法。 除非人们很好地了解机制之间的差异,否则这可能不是一件容易的事。 在这篇简短的文章中,我想回顾一下实现身份验证的4种流行机制。 还要进行...
  • IIS网站默认是允许所有用户连接,如果网站的只需要针对特定用户来开放的话,就需要对用户进行验证,而进行验证的主要方法有: 匿名身份验证 基本身份验证 摘要式身份验证 Windows集成身份验证 系统默认...
  • 社交网络和用户“身份疲劳”正迫使企业接受分布式身份作为其数据和应用程序的身份验证途径。 实际上,根据ISACA,国际专业协会致力于IT治理(请参阅参考资料 ): “ IT的消费化”是近年来影响IT组织的最重要趋势...
  • Shiro身份验证

    万次阅读 2017-08-11 18:03:37
    身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro...
  • 因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性。...
  • Authentication—身份验证流程

    千次阅读 2020-01-21 14:05:43
    本篇是对Shiro体系架构的介绍,本栏目大部分内容来自于Shiro官网。...Authentication是身份验证的过程,即证明该用户是否合法,对于证明一个用户是否合法,用户需要提供一些身份识别信息,以及系统能信任的身份证...
  • about(Short Description / Summary):该项目描述了一种使用手机实现两因素身份验证方法。 所提出的方法保证以非常安全的方式对服务(例如在线银行或 ATM 机)进行身份验证。 提议的系统涉及使用手机作为一次性...
  • jgit_JGit身份验证说明

    2020-06-18 17:05:52
    支持SSH和HTTP(S)等常用协议及其身份验证方法。 本文总结了如何使用JGit身份验证API安全地访问远程Git存储库。 尽管本文中的示例使用CloneCommand,但是可以将所描述的技术应用于连接到远程存储库的所有类,...
  • windows身份验证(本机的ip地址或者localhost 或者.或者127.0.0.1) SQL Server身份验证(用户名和密码登录) 常见的错误代码18456(登录失败)和18470(账户被禁用)解决方法: 进入window身份验证》对象...
  • Shiro实现身份验证

    2018-12-10 16:31:37
    Shiro实现身份验证 身份验证,即在应用中谁能证明他是他本人,一般提供如他们的身份ID、用户名、密码等来证明。 在Shiro中,用户需要提供principals(身份)和credentials(证明)给Shiro,从而应用能验证用户...
  • Hapi-身份验证

    2018-12-13 14:54:05
    小序 ...如果可以的话,在使用身份验证插件前先自行研究一下插件的源码,或者使用流行的、优秀文档的、经过充分测试的插件,比如在Github上由hapi组织发布的插件。  ---hapi.js实战 完事~ 
  • .net 身份验证

    千次阅读 2007-03-26 14:06:00
    1.身份验证概念 任何成功的应用程序安全策略的基础都是稳固的身份验证和授权手段,以及提供机密数据的保密性和完整性的安全通讯。 身份验证(authentication)是一个标识应用程序客户端的过程,这里的客户端可能...
  • 微服务-API网关-身份验证

    千次阅读 2020-08-18 19:25:49
    对于身份验证,我们分两种情况来看待,界面登录验证和接口调用验证,这两种方式所使用的身份验证方法很多时候是不一样的。 界面登录验证 指用户通过前端(包含浏览器端和移动端)来进入系统,用户一旦登
  • 基于角色授权大部分 .NET Web 应用程序都使用基于角色的授权方法。您需要考虑各种角色类型,选择最适合您的应用程序方案的方法。您以下选项: • .NET 角色 • Enterprise Services
  • 前一段时间一直想搞明白一个问题:Asp.net是如何通过Cookie来验证用户权限并自动登录的,找了许多的资料,包括System.Web.Dll文件的反汇编也看了不少,只弄懂...虽然知道了票证的加解密方法,但读取请求的Cookie并进行验证
  • 用PAM自定义身份验证

    2019-04-11 16:31:15
    现在Linux系统使用 Pluggable Authentication Module (PAM),为服务和应用程序提供灵活的身份验证。...改变或改进系统的身份验证机制会要求更新和重新编译所有使用该机制的应用程序,甚至当你系统上所有相关应用程...
  • 关于身份认证的方式,最近在工作中用到了些,想着就干脆针对目前常用身份认证组件的实际使用,就做一个总结,会涉及Json Web Token(JWT),Shiro的常见认证方式。 传统的认证流程 在学习这些组件的时候,还是需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,989
精华内容 46,795
关键字:

常用的身份验证方法有