精华内容
下载资源
问答
  • 身份验证-应用程序-安全性 认证过滤器 这是拦截请求并尝试对其进行身份验证的筛选器。 在Spring Security中,它将请求转换为身份验证对象,并将身份验证委派给AuthenticationManager。 认证管理器 它是身份验证的...
  • gitlab开启二次验证后,需要安装如下任意一款软件,生成验证码,生成后,保存好恢复代码,预防卸载软件或更换手机后的繁琐... 1、FreeOTP 2、Google身份验证器 压缩包中存有两个身份验证器,可以任意选择使用
  • 谷歌身份验证器,即Google Authenticator(Google身份验证器)v2.33 谷歌推出的一款动态口令工具,解决大家的google账户遭到恶意攻击的问题。
  • 使用google身份验证器实现动态密码验证,采用JAVA语言。包含客户端和服务端key的生成和app动态口令的验证
  • 远程桌面发生身份验证错误,要求的函数不受支持这可能是由于CredSSP加密Oracle修正
  • post调用接口(附带身份验证和自带参数的方式),自己在百度上搜索了很多都不如意,最后自己整理了一套代码示例
  • 本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599
  • asp.net webapi2 基于token令牌的身份验证 通过浏览器模拟附加token的headers请求授权
  • 身份验证

    千次阅读 多人点赞 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里面的对应关系来解决这个问题。

     

     

     

    展开全文
  • 其中配置了对传入请求的拦截器用以验证调用者身份 验证程序: WsServerAuthHandler. 这里只需要提供调用者应该使用的正确的口令. 是否和调用者实际传入的口令一致,由cxf完成. web.xml ------------------------- ...
  • 令牌提交的身份验证失败 介绍 (Introduction) Token based authentication is prominent everywhere on the web nowadays. With most every web company using an API, tokens are the best way to handle ...

    令牌提交的身份验证失败

    介绍 (Introduction)

    Token based authentication is prominent everywhere on the web nowadays. With most every web company using an API, tokens are the best way to handle authentication for multiple users.

    如今,基于令牌的身份验证在网络上无处不在。 对于大多数使用API​​的网络公司而言,令牌是处理多个用户身份验证的最佳方法。

    There are some very important factors when choosing token based authentication for your application. The main reasons for tokens are:

    为应用程序选择基于令牌的身份验证时,有一些非常重要的因素。 令牌的主要原因是:

    Stateless and scalable servers
    无状态且可扩展的服务器
    Mobile application ready
    移动应用就绪
    Pass authentication to other applications
    将身份验证传递给其他应用程序
    Extra security
    额外的安全性

    谁使用基于令牌的身份验证? (Who Uses Token Based Authentication?)

    Any major API or web application that you've come across has most likely used tokens. Applications like Facebook, Twitter, Google+, GitHub, and so many more use tokens.

    您遇到的任何主要API或Web应用程序都最有可能使用了令牌。 Facebook,Twitter,Google +,GitHub等应用程序都使用令牌。

    Let's take a look at exactly how it works.

    让我们来看看它是如何工作的。

    代币为何出现 (Why Tokens Came Around)

    Before we can see how token based authentication works and its benefits, we have to look at the way authentication has been done in the past.

    在我们了解基于令牌的身份验证的工作原理及其好处之前,我们必须了解一下过去身份验证的完成方式。

    基于服务器的身份验证(传统方法) (Server Based Authentication (The Traditional Method))

    Since the HTTP protocol is stateless, this means that if we authenticate a user with a username and password, then on the next request, our application won't know who we are. We would have to authenticate again.

    由于HTTP协议是无状态的 ,这意味着如果我们使用用户名和密码对用户进行身份验证,那么在下一个请求时,我们的应用程序将不知道我们是谁。 我们将不得不再次进行身份验证。

    The traditional way of having our applications remember who we are is to store the user logged in information on the server. This can be done in a few different ways on the session, usually in memory or stored on the disk.

    让我们的应用程序记住我们是谁的传统方式是将用户登录信息存储在服务器上 。 这可以在会话上以几种不同的方式完成,通常在内存中或存储在磁盘上。

    Here is a graph of how a server based authentication workflow would look:

    这是基于服务器的身份验证工作流的外观图:

    tokens-traditional

    As the web, applications, and the rise of the mobile application have come about, this method of authentication has shown problems, especially in scalability.

    随着网络,应用程序以及移动应用程序的兴起,这种身份验证方法尤其在可伸缩性方面出现了问题。

    基于服务器的身份验证的问题 (The Problems with Server Based Authentication)

    A few major problems arose with this method of authentication.

    这种身份验证方法引起了一些主要问题。

    Sessions: Every time a user is authenticated, the server will need to create a record somewhere on our server. This is usually done in memory and when there are many users authenticating, the overhead on your server increases.

    会话 :每次对用户进行身份验证时,服务器都需要在我们服务器上的某处创建一条记录。 这通常在内存中完成,并且当有许多用户进行身份验证时,服务器上的开销会增加。

    Scalability: Since sessions are stored in memory, this provides problems with scalability. As our cloud providers start replicating servers to handle application load, having vital information in session memory will limit our ability to scale.

    可伸缩性 :由于会话存储在内存中,因此存在可伸缩性问题。 随着我们的云提供商开始复制服务器来处理应用程序负载,会话内存中的重要信息将限制我们的扩展能力。

    CORS: As we want to expand our application to let our data be used across multiple mobile devices, we have to worry about cross-origin resource sharing (CORS). When using AJAX calls to grab resources from another domain (mobile to our API server), we could run into problems with forbidden requests.

    CORS :由于我们要扩展应用程序以使我们的数据可在多个移动设备上使用,因此我们不得不担心跨域资源共享(CORS)。 当使用AJAX调用从另一个域(移动到我们的API服务器)获取资源时,我们可能会遇到禁止请求的问题。

    CSRF: We will also have protection against cross-site request forgery (CSRF). Users are susceptible to CSRF attacks since they can already be authenticated with say a banking site and this could be taken advantage of when visiting other sites.

    CSRF :我们还将提供针对跨站点请求伪造 (CSRF)的保护。 用户很容易受到CSRF攻击,因为他们已经可以通过银行站点进行身份验证,并且可以在访问其他站点时加以利用。

    With these problems, scalability being the main one, it made sense to try a different approach.

    面对这些问题,可伸缩性是主要问题,因此尝试另一种方法是有意义的。

    基于令牌的工作方式 (How Token Based Works)

    Token based authentication is stateless. We are not storing any information about our user on the server or in a session.

    基于令牌的身份验证是无状态的 。 我们不会在服务器或会话中存储有关用户的任何信息。

    This concept alone takes care of many of the problems with having to store information on the server.

    仅此概念就解决了许多必须将信息存储在服务器上的问题。

    No session information means your application can scale and add more machines as necessary without worrying about where a user is logged in.

    没有会话信息意味着您的应用程序可以根据需要扩展和添加更多计算机,而不必担心用户登录的位置。

    Although this implementation can vary, the gist of it is as follows:

    尽管此实现可能有所不同,但其要点如下:

    1. User Requests Access with Username / Password

      用户使用用户名/密码请求访问
    2. Application validates credentials

      应用程序验证凭证
    3. Application provides a signed token to the client

      应用程序向客户端提供签名令牌
    4. Client stores that token and sends it along with every request

      客户端存储该令牌并将其与每个请求一起发送
    5. Server verifies token and responds with data

      服务器验证令牌并响应数据

    Every single request will require the token. This token should be sent in the HTTP header so that we keep with the idea of stateless HTTP requests. We will also need to set our server to accept requests from all domains using Access-Control-Allow-Origin: *. What's interesting about designating * in the ACAO header is that it does not allow requests to supply credentials like HTTP authentication, client-side SSL certificates, or cookies.

    每个请求都将需要令牌 。 该令牌应在HTTP标头中发送,以便我们遵循无状态HTTP请求的想法。 我们还需要使用Access-Control-Allow-Origin: *将服务器设置为接受来自所有域的请求。 在ACAO标头中指定*的有趣之处在于,它不允许请求提供HTTP身份验证,客户端SSL证书或cookie之类的凭据。

    Here's an infographic to explain the process:

    以下是说明流程的信息图:

    tokens-new

    Once we have authenticated with our information and we have our token, we are able to do many things with this token.

    一旦我们对我们的信息进行了身份验证并获得了令牌,我们就可以使用此令牌执行许多操作。

    We could even create a permission based token and pass this along to a third-party application (say a new mobile app we want to use), and they will be able to have access to our data -- but only the information that we allowed with that specific token.

    我们甚至可以创建一个基于权限的令牌,并将其传递给第三方应用程序(例如,我们要使用的新移动应用程序),这样他们就可以访问我们的数据, 但只能访问我们允许的信息带有特定的令牌

    代币的好处 (The Benefits of Tokens)

    无状态且可扩展 (Stateless and Scalable)

    infinity

    Tokens stored on client side. Completely stateless, and ready to be scaled. Our load balancers are able to pass a user along to any of our servers since there is no state or session information anywhere.

    令牌存储在客户端。 完全无状态,随时可以扩展。 我们的负载平衡器能够将用户传递到我们的任何服务器,因为任何地方都没有状态或会话信息。

    If we were to keep session information on a user that was logged in, this would require us to keep sending that user to the same server that they logged in at (called session affinity).

    如果我们要保留有关已登录用户的会话信息,这将要求我们继续将该用户发送到他们登录时所在同一服务器 (称为会话亲缘关系)。

    This brings problems since, some users would be forced to the same server and this could bring about a spot of heavy traffic.

    这带来了问题,因为某些用户将被迫使用同一台服务器,这可能会带来大量流量。

    Not to worry though! Those problems are gone with tokens since the token itself holds the data for that user.

    不过不用担心! 令牌本身已解决了这些问题,因为令牌本身保存了该用户的数据。

    安全 (Security)

    you-shall-not-pass

    The token, not a cookie, is sent on every request and since there is no cookie being sent, this helps to prevent CSRF attacks. Even if your specific implementation stores the token within a cookie on the client side, the cookie is merely a storage mechanism instead of an authentication one. There is no session based information to manipulate since we don’t have a session!

    令牌(不是cookie)会在每个请求上发送,并且由于没有cookie发送,因此有助于防止CSRF攻击。 即使您的特定实现将令牌存储在客户端的cookie中,该cookie仅仅是一种存储机制,而不是一种认证机制。 由于没有会话,因此没有可操作的基于会话的信息!

    The token also expires after a set amount of time, so a user will be required to login once again. This helps us stay secure. There is also the concept of token revocation that allows us to invalidate a specific token and even a group of tokens based on the same authorization grant.

    令牌还会在设置的时间后过期,因此将要求用户再次登录。 这有助于我们保持安全。 还有令牌撤销的概念,它使我们可以基于相同的授权授予使特定令牌甚至一组令牌无效。

    可扩展性(“ Friend of a Friend and Permissions”) (Extensibility (Friend of A Friend and Permissions))

    share-candy

    Tokens will allow us to build applications that share permissions with another. For example, we have linked random social accounts to our major ones like Facebook or Twitter.

    令牌将使我们能够构建彼此共享权限的应用程序。 例如,我们已将随机社交帐户链接到我们的主要帐户,例如Facebook或Twitter。

    When we login to Twitter through a service (let's say Buffer), we are allowing Buffer to post to our Twitter stream.

    当我们通过服务(例如Buffer)登录Twitter时,我们允许Buffer发布到我们的Twitter流中。

    By using tokens, this is how we provide selective permissions to third-party applications. We could even build our own API and hand out special permission tokens if our users wanted to give access to their data to another application.

    通过使用令牌,这就是我们向第三方应用程序提供选择性权限的方式 。 如果我们的用户希望将其数据访问权限授予另一个应用程序,我们甚至可以构建自己的API并发放特殊权限令牌。

    多个平台和域 (Multiple Platforms and Domains)

    We talked a bit about CORS earlier. When our application and service expands, we will need to be providing access to all sorts of devices and applications (since our app will most definitely become popular!).

    我们之前谈到了CORS。 当我们的应用程序和服务扩展时,我们将需要提供对各种设备和应用程序的访问(因为我们的应用程序肯定会很受欢迎!)。

    Having our API just serve data, we can also make the design choice to serve assets from a CDN. This eliminates the issues that CORS brings up after we set a quick header configuration for our application.

    让我们的API只提供数据服务,我们还可以做出设计选择,以提供CDN中的资产。 这消除了在为应用程序设置快速标头配置后CORS出现的问题。

    Access-Control-Allow-Origin: *

    Our data and resources are available to requests from any domain now as long as a user has a valid token.

    现在,只要用户拥有有效的令牌,我们的数据和资源就可用于来自任何域的请求。

    基于标准 (Standards Based)

    When creating the token, you have a few options. We'll be diving more into this topic when we secure an API in a follow-up article, but the standard to use would be JSON Web Tokens.

    创建令牌时,您有一些选择。 在后续文章中确保API的安全时,我们将进一步探讨该主题,但是要使用的标准是JSON Web令牌

    This handy debugger and library chart shows the support for JSON Web Tokens. You can see that it has a great amount of support across a variety of languages. This means you could actually switch out your authentication mechanism if you choose to do so in the future!

    此便捷的调试器和库图表显示了对JSON Web令牌的支持。 您会看到它对多种语言都提供了大量支持。 这意味着,如果您将来选择这样做,则实际上可以关闭认证机制!

    结论 (Conclusion)

    This was just a look at the how and why of token based authentication. As is always the case in the world of security, there is much, much, much, much (too many?) more to each topic and it varies per use case. We even dove into some topics on scalability which deserves its own conversation as well.

    这只是基于令牌的身份验证的方式和原因。 与安全领域一样,每个主题还有很多很多(太多?),并且每个用例都不同。 我们甚至探讨了一些有关可伸缩性的主题,这也值得我们自己讨论。

    This was a high level quick overview, so please feel free to point out anything that was missed or any questions you have on the matter.

    这是一个高层次的快速概述,因此,请随时指出任何遗漏的内容或对此问题的任何疑问。

    In our next article, we'll be looking at the anatomy of JSON Web Tokens. For full code examples on how to authenticate a Node API using JSON Web Tokens, check out our book MEAN Machine.

    在下一篇文章中,我们将研究JSON Web令牌剖析 。 有关如何使用JSON Web令牌对Node API进行身份验证的完整代码示例,请查看我们的书籍MEAN Machine

    Edit #1 Adding ACAO header info and CSRF clarifications (thanks to 编辑#1添加ACAO标头信息和CSRF澄清(感谢 Emily Stark for the article info) Emily Stark的文章信息)

    翻译自: https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

    令牌提交的身份验证失败

    展开全文
  • 基于Token的身份验证的原理

    万次阅读 多人点赞 2019-05-06 13:41:32
    4.1 传统方式——基于服务器的验证 4.2 基于服务器验证方式暴露的一些问题 4.3 基于Token的验证原理 4.5 Tokens的优势 参考文献 1 发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为...

    目录

    1 发展史

    2 Cookie

    3 Session

    3.1 cookie和session的区别

    4 Token

    4.1 传统方式——基于服务器的验证

    4.2 基于服务器验证方式暴露的一些问题

    4.3 基于Token的验证原理

    4.5 Tokens的优势

    参考文献


    1 发展史

    1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用记住是谁刚刚发了HTTP请求,   每个请求对我来说都是全新的。这段时间很嗨皮。

    2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统,  哪些人往自己的购物车中放商品,  也就是说我必须把每个人区分开,这就是一个不小的挑战,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样,  每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了。

    3、这样大家很嗨皮了,可是服务器就不嗨皮了,每个人只需要保存自己的session id,而服务器要保存所有人的session id !  如果访问服务器多了, 就得由成千上万,甚至几十万个。这对服务器说是一个巨大的开销 , 严重的限制了服务器扩展能力, 比如说我用两个机器组成了一个集群, 小F通过机器A登录了系统,  那session id会保存在机器A上,  假设小F的下一次请求被转发到机器B怎么办?  机器B可没有小F的 session id啊。

    有时候会采用一点小伎俩: session sticky , 就是让小F的请求一直粘连在机器A上, 但是这也不管用, 要是机器A挂掉了, 还得转到机器B去。

    那只好做session 的复制了, 把session id  在两个机器之间搬来搬去, 快累死了。

          

    后来有个叫Memcached的支了招: 把session id 集中存储到一个地方, 所有的机器都来访问这个地方的数据, 这样一来,就不用复制了, 但是增加了单点失败的可能性, 要是那个负责session 的机器挂了,  所有人都得重新登录一遍, 估计得被人骂死。

            

    也尝试把这个单点的机器也搞出集群,增加可靠性, 但不管如何, 这小小的session 对我来说是一个沉重的负担

    4、于是有人就一直在思考, 我为什么要保存这可恶的session呢, 只让每个客户端去保存该多好?

    可是如果不保存这些session id ,  怎么验证客户端发给我的session id 的确是我生成的呢?  如果不去验证,我们都不知道他们是不是合法登录的用户, 那些不怀好意的家伙们就可以伪造session id , 为所欲为了。

    嗯,对了,关键点就是验证 !

    比如说, 小F已经登录了系统, 我给他发一个令牌(token), 里边包含了小F的 user id, 下一次小F 再次通过Http 请求访问我的时候, 把这个token 通过Http header 带过来不就可以了。

    不过这和session id没有本质区别啊, 任何人都可以可以伪造,  所以我得想点儿办法, 让别人伪造不了。

    那就对数据做一个签名吧, 比如说我用HMAC-SHA256 算法,加上一个只有我才知道的密钥,  对数据做一个签名, 把这个签名和数据一起作为token ,   由于密钥别人不知道, 就无法伪造token了。

    这个token 我不保存,当小F把这个token 给我发过来的时候,我再用同样的HMAC-SHA256 算法和同样的密钥,对数据再计算一次签名, 和token 中的签名做个比较, 如果相同, 我就知道小F已经登录过了,并且可以直接取到小F的user id ,  如果不相同, 数据部分肯定被人篡改过, 我就告诉发送者: 对不起,没有认证。

    Token 中的数据是明文保存的(虽然我会用Base64做下编码, 但那不是加密), 还是可以被别人看到的, 所以我不能在其中保存像密码这样的敏感信息。

    当然, 如果一个人的token 被别人偷走了, 那我也没办法, 我也会认为小偷就是合法用户, 这其实和一个人的session id 被别人偷走是一样的。

    这样一来,我就不保存session id 了,我只是生成token , 然后验证token,我用我的CPU计算时间获取了我的session 存储空间 !

    解除了session id这个负担,可以说是无事一身轻,我的机器集群现在可以轻松地做水平扩展,用户访问量增大,直接加机器就行。这种无状态的感觉实在是太好了!

    2 Cookie

    cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

    cookie由服务器生成,发送给浏览器,浏览器把cookie以 K-V 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

    3 Session

    session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

    session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。

    服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

    3.1 cookie和session的区别

    session是存储服务器端,cookie是存储在客户端,所以session的安全性比cookie高。

    获取session里的信息是通过存放在会话cookie里的session id获取的。而session是存放在服务器的内存中里,所以session里的数据不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里。

    cookie确切的说分为两大类:会话cookie和持久化cookie。

    会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,当浏览器关闭会话cookie也就消失了

    持久化cookie是存放在客户端硬盘中,持久化cookie的生命周期是我们在设置cookie时候设置的那个保存时间。

    session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失,所以sessionid也就消失了,但是session的信息还存在服务器端,只是查不到所谓的session,但它并不是不存在。所以session在服务器关闭的时候,或者是session过期,又或者调用了invalidate(),再或者是session中的某一条数据消失调用session.removeAttribute()方法,session在通过调用session.getsession来创建的。

    4 Token

    在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。

    以下几点特性会让你在程序中使用基于Token的身份验证

    1. 无状态、可扩展
    2. 支持移动设备
    3. 跨程序调用
    4. 安全

     那些使用基于Token的身份验证的大佬们:大部分你见到过的API和Web应用都使用tokens。例如Facebook, Twitter, Google+, GitHub等。

    在介绍基于Token的身份验证的原理与优势之前,不妨先看看之前的认证都是怎么做的。

    4.1 传统方式——基于服务器的验证

    由于 HTTP 协议是无状态的,这种无状态意味着程序需要验证每一次请求,从而辨别客户端的身份。在这之前,程序都是通过在服务端存储登录的用户信息来辨别身份的。这种方式一般都是通过存储 session 来完成,可放在内存或磁盘上。下图说明了基于服务器验证身份的过程:

    随着Web,应用程序,已经移动端的兴起,这种验证的方式逐渐暴露出了问题。尤其是在可扩展性方面。

    4.2 基于服务器验证方式暴露的一些问题

    1. Seesions:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
    2. 可扩展性:由于sessions 存放在服务器内存中,伴随而来的是可扩展性问题。当我们想要增加服务器来解决负载问题时,session 里的关键性信息会限制我们的扩展。
    3. CORS (跨域资源共享):当我们扩展应用程序,让数据能够从不同设备上访问时,跨域资源的共享会是一个让人头疼的问题。在使用 Ajax 抓取另一个域的资源时(移动端访问我们的 API 服务器),可能会出现禁止请求的情况。
    4. CSRF (跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。

    在这些问题中,可扩展性是最突出的。因此我们有必要去寻求一种更有行之有效的方法。

    4.3 基于Token的验证原理

    基于 Token 的身份验证是无状态的,我们不用将用户信息存在服务器或 Session 中。这种概念解决了在服务端存储信息时的许多问题。没有 session 信息意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录和已经登录到了哪里。

    虽然基于Token的身份验证实现的方式很多,但大致过程如下:

    1. 用户通过用户名和密码发送请求。
    2. 程序验证。
    3. 程序返回一个签名的 token 给客户端。
    4. 客户端储存 token, 并且每次请求都会附带它。
    5. 服务端验证 token 并返回数据。

     每一次请求都需要Token。Token 应该在 HTTP的头部发送从而保证了 Http 请求无状态。我们也需要设置服务器属性

    Access-Control-Allow-Origin: * 

    来让服务器能接受到来自所有域的请求。需要注意的是,在ACAO头部指定 * 时,不得带有像HTTP认证,客户端SSL证书和cookies的证书。

      实现思路:

    1.用户登录校验,校验成功后就返回Token给客户端。

    2.客户端收到数据后保存在客户端

    3.客户端每次访问API是携带Token到服务器端。

    4.服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

     当我们在程序中认证了信息并取得 token 之后,我们便能通过这个 token 做许多的事情。我们甚至能基于创建一个基于权限的token传给第三方应用程序,这些第三方程序能够获取到我们的数据(当然只限于该 token 被允许访问的数据)。

    4.5 Tokens的优势

    (1)无状态、可扩展

    在客户端存储的 token 是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载均衡服务器 能够将用户的请求传递到任何一台服务器上,因为服务器与用户信息没有关联。相反在传统方式中,我们必须将请求发送到一台存储了该用户 session 的服务器上(称为Session亲和性),因此当用户量大时,可能会造成 一些拥堵。使用 token 完美解决了此问题。

    (2)安全性

    请求中发送 token 而不是 cookie,这能够防止 CSRF(跨站请求伪造) 攻击。即使在客户端使用 cookie 存储 token,cookie 也仅仅是一个存储机制而不是用于认证。另外,由于没有 session,让我们少我们不必再进行基于 session 的操作。 

    Token 是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过 token revocataion可以使一个特定的 token 或是一组有相同认证的 token 无效。

    (3)可扩展性

    使用 Tokens 能够与其它应用共享权限。例如,能将一个博客帐号和自己的QQ号关联起来。当通过一个 第三方平台登录QQ时,我们可以将一个博客发到QQ平台中。

    使用 token,可以给第三方应用程序提供自定义的权限限制。当用户想让一个第三方应用程序访问它们的数据时,我们可以通过建立自己的API,给出具有特殊权限的tokens。

    (4)多平台与跨域

    我们已经讨论了CORS (跨域资源共享)。当我们的应用和服务不断扩大的时候,我们可能需要通过多种不同平台或其他应用来接入我们的服务。

    可以让我们的API只提供数据,我们也可以从CDN提供服务(Having our API just serve data, we can also make the design choice to serve assets from a CDN.)。 在为我们的应用程序做了如下简单的配置之后,就可以消除 CORS 带来的问题。只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到。

              Access-Control-Allow-Origin: *       
    

    (5)基于标准

    有几种不同方式来创建 token。最常用的标准就是 JSON Web Tokens。很多语言都支持它。

    参考文献

    [1] The ins and outs of Token-based Authentication.

    展开全文
  • 亚马逊一直停留在身份验证Two-Factor Authentication (2FA) is a great security tool, and we always recommend it. Most apps make it pretty easy to turn on 2FA, and Amazon is no exception. Here’s how to ...
    亚马逊一直停留在身份验证

    亚马逊一直停留在身份验证

    amazon logo

    Two-Factor Authentication (2FA) is a great security tool, and we always recommend it. Most apps make it pretty easy to turn on 2FA, and Amazon is no exception. Here’s how to enable it and make yourself safer.

    两要素身份验证(2FA)是一种出色的安全工具, 我们始终推荐使用 。 大多数应用程序很容易打开2FA,Amazon也不例外。 这是启用它并使自己更安全的方法。

    You’ll need to be logged in to your Amazon account, either on the Amazon website or in the Amazon app in your phone. Once you’re logged in, go to Your Account > Login & security and click the Edit button next to “Advanced Security Settings.”

    您需要在Amazon网站或手机中的Amazon应用程序中登录到您的Amazon帐户。 登录后,进入“帐户”>“登录和安全”,然后单击“高级安全设置”旁边的“编辑”按钮。

    The "Advanced Security Settings" edit button

    At the top of the page, next to the “Two-Step Verification” title, click “Get Started.” (And yes, Amazon calls it two-step verification instead of two-factor authentication, but it’s the same thing.)

    在页面顶部,“两步验证”标题旁边,单击“入门”。 (是的,亚马逊称其为两步验证而不是两步验证,但这是同一回事。)

    The "Two-Step Verification" Get Started button

    Now you get to choose how you want to receive your 2FA codes. We recommend using an authenticator app, which is the process we’re going to show here, but you can use SMS if you prefer as it’s better than not using 2FA at all.

    现在,您可以选择接收2FA代码的方式。 我们建议您使用身份验证器应用程序,这是我们将在此处显示的过程,但是如果您愿意,可以使用SMS,因为它比根本不使用2FA更好

    The QR code, and the MFA code text box

    The first step in the process is to install your authenticator app, which we’ll assume you’ve done already. The second step is to open your authenticator app and add an account:

    该过程的第一步是安装您的身份验证器应用程序,我们假设您已经完成了。 第二步是打开您的身份验证器应用程序并添加一个帐户:

    • If you’re using the Amazon website: Hold your phone camera up to the QR code displayed by Amazon, and follow the instructions in your app.

      如果您使用的是Amazon网站:将手机摄像头举至Amazon所显示的QR码,然后按照应用程序中的说明进行操作。

    • If you’re using the Amazon app on your phone: Copy the long code that’s displayed and add it manually to your authenticator app.

      如果您在手机上使用Amazon应用程序:复制显示的长代码并将其手动添加到身份验证器应用程序。

    Finally, type the code generated by your authenticator app into the “Enter OTP” text box on the Amazon page and then click “Verify code and continue.”

    最后,在Amazon页面上的“输入OTP”文本框中键入由身份验证器应用程序生成的代码,然后单击“验证代码并继续”。

    If you’re using the Amazon app on your phone, the process is now complete.

    如果您正在手机上使用Amazon应用程序,则该过程现已完成。

    If you’re logged into the Amazon website, the next stage gives you information about how to use 2FA if you’re on a device that can’t display a second screen. There’s no information about what devices these are, but the images suggest earlier versions of the Kindle. In our tests using Kindles up to five years old, there was no 2FA prompt at all, so there may be no issue here. But we still recommend you check all your devices that use your Amazon account to make sure you can access your account as expected.

    如果您登录了亚马逊网站,则下一阶段将为您提供有关在无法显示第二个屏幕的设备上如何使用2FA的信息。 没有关于这些设备是什么的信息,但是图像建议使用Kindle的早期版本。 在我们使用长达5年的Kindle的测试中,根本没有2FA提示,因此这里可能没有问题。 但是我们仍然建议您检查所有使用亚马逊帐户的设备,以确保可以按预期访问帐户。

    On the same page, you can also tell Amazon that your current browser doesn’t require a 2FA check by switching on the “Don’t require codes on this browser” checkbox. You should only do this if you’re on your own computer, not on someone else’s or a shared computer.

    在同一页面上,您还可以通过选中“在此浏览器上不需要代码”复选框,告诉Amazon您当前的浏览器不需要2FA检查。 仅当您使用自己的计算机时,才应该这样做,而不要在他人的计算机或共享计算机上。

    If you’ve set your browser up to delete cookies when you close the browser down, this won’t work unless you tell your browser to make an exception for Amazon cookies. It’s up to you if this is worth the trade-off of easier logins. After that, click the “Got it. Turn on Two-Step Verification” button, and you’re done.

    如果您已将浏览器设置为在关闭浏览器后删除Cookie ,则该设置将无效,除非您告诉浏览器对Amazon Cookie进行例外处理。 是否值得在更轻松的登录中进行权衡取舍,这取决于您。 之后,单击“知道了。 打开“两步验证”按钮,就完成了。

    The to-step verification confirmation button

    You’ll be taken back to the “Advanced Security Settings” page.

    您将被带回到“高级安全设置”页面。

    The "Advanced Security Settings" page

    Unlike some apps, Amazon doesn’t provide backup codes if you have trouble with 2FA. Instead, it will send you a text message if your authenticator app isn’t working correctly. And if all else fails, you’ll have to phone them for help. Amazon’s customer service is surprisingly good, but ideally, you want to be able to resolve issues yourself, especially login issues. On the “Advanced Security Settings” page there is a “Back-up methods” section, with the option to add a new phone.

    与某些应用程序不同,如果您在使用2FA时遇到问题,Amazon不会提供备份代码。 相反,如果您的身份验证器应用程序无法正常运行,它将向您发送一条短信。 如果其他所有方法均失败,则必须给他们打电话寻求帮助。 亚马逊的客户服务非常好,但是理想情况下,您希望自己能够解决问题,尤其是登录问题。 在“高级安全设置”页面上,有一个“备份方法”部分,其中包含添加新手机的选项。

    The "Add new phone" back up option

    Use this to add a recovery phone that SMS codes can be sent to if you lose your primary phone. If you haven’t got a second phone, use the phone number of a trusted family member or friend (with their permission). Otherwise, you’ll have to contact Amazon if you’re locked out of your account.

    使用此功能可以添加辅助电话,如果您丢失了主要电话,可以将SMS代码发送到该电话。 如果您没有第二部电话,请使用受信任的家庭成员或朋友的电话号码(经他们的许可)。 否则,如果您被锁定帐户,则必须与Amazon联系。

    Now your Amazon account is set up and configured for 2FA. If you have the Amazon app on your phone, you won’t need to enter a 2FA code, as long as it’s the same phone you use to authenticate the Amazon website. Want more MFA goodness? Check out our other guides for Gmail, O365, Apple ID, and Slack.

    现在,您的Amazon帐户已设置并配置为2FA。 如果您的手机上装有Amazon应用程序,则无需输入2FA代码,只要该密码与您用来验证Amazon网站的电话相同即可。 需要更多MFA优势吗? 查看有关GmailO365Apple IDSlack的其他指南。

    翻译自: https://www.howtogeek.com/425220/how-to-turn-on-mfa-for-your-amazon-account/

    亚马逊一直停留在身份验证

    展开全文
  • Kerberos身份验证流程

    千次阅读 2020-05-21 09:26:22
    Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。 在 Kerberos 认证中,最主要的问题是如何证明「你是你」的问题,如当一个...
  • windows身份验证添加一个SQL Server身份验证方式 更多资源可以关注微信公众号:菜鸟资源分享 1、使用windows身份验证登录SQL Server数据库 2、在【安全性】——【登录名】——有点登录名点击【新建登录名】——勾选...
  • WCF 安全性 四种身份验证方式

    热门讨论 2012-03-05 12:28:28
    WCF 四种身份验证方式 都通过本人测试 qq:574311505 None Windows 自定义证书 自定义用户名密码
  • ELK下在Kibana中进行身份验证

    千次阅读 2020-03-10 12:03:12
    Kibana支持以下身份验证机制: 1、基本认证 2、令牌认证 3、公钥基础结构(PKI)身份验证 4、SAML单点登录 5、OpenID Connect单一登录 6、Kerberos单点登录 基本身份验证编辑 要成功登录Kibana,基本身份验证需要...
  • 谷歌身份验证

    千次阅读 2021-10-11 20:36:46
    文章目录谷歌身份验证器谷歌验证 (Google Authenticator) 的实现原理参考 谷歌身份验证器 Google身份验证器Google Authenticator是谷歌推出的基于时间的一次性密码(Time-based One-time Password,简称TOTP),只需要...
  • 未能对git remote进行身份验证

    千次阅读 2021-02-18 10:27:26
    1.错误信息 2.原因 错误原因的出现其实就是因为你的gitee密码更改了,但是没用同步到Windows凭据管理器上,所以导致报这个错误 3.首先点击控制面板找到用户账户,操作如下图所示
  • 最近公司新进项目需求:谷歌身份验证器来做一个二次因素校验,查了很多网上的例子,也自己写了demo,其中遇到了些问题,记录一下: 1.谷歌身份验证器原理简单说明 2.谷歌身份验证器的使用流程 3.谷歌身份验证器...
  • [编者注:本文介绍了如何为Domino 4.6和4.6.1设置SSL客户机认证。] 互联网上最新的行业流行词是SSL。... 验证服务器身份以防止服务器欺骗。 使用SSL 3.0验证客户端身份。 有关这些SSL概念的介绍,请参见H...
  • 微服务-API网关-身份验证

    千次阅读 2020-08-18 19:25:49
    API网关-身份验证 身份验证介绍 身份验证通常是进入系统的第一道大闸,要求用户出具登录此系统的身份证明。 其实在实际情况下,很多人开发的系统都没有身份验证功能或者就只有普通用户名和密码验证功能,这样的系统...
  • Java支付宝身份验证接口接入指南(人脸验证)

    千次阅读 热门讨论 2020-12-02 16:49:30
    Java支付宝身份验证接口接入指南 最近公司项目有人脸身份核验的需求,首先就想到了支付宝的身份验证接口,于是就需要看支付宝的开放api文档了,这里就有些坑了,然后就本次接入遇到的坑,做个整理。(基于web网页) ...
  • 一个简单的基于SOAP headers的WebService式身份验证 通过通过SOAP Header身份验证。 通过集成windows身份验证
  • 常见身份验证协议

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

    千次阅读 2020-03-18 00:11:30
    如果不清楚Google身份验证器是个什么东西的,建议先去了解一下,再回来看此篇文章,会更好理解一些。 GitHub上有对Google Auth的php实现封装,这里直接拿下来用,可从以下地址自行获取GitHub Google Authenticator ...
  • HTTP 中的用户身份验证

    千次阅读 2018-08-29 10:30:43
      身份验证是判断客户端是否有资格访问资源的过程。HTTP 协议支持将身份验证作为协商访问安全资源的一种方式。   来自客户端的初始请求通常是匿名请求,不包含任何身份验证信息。 HTTP 服务器应用程序可以拒绝...
  • Google身份验证服务端实现

    千次阅读 2019-04-24 12:01:39
    * 生成一个google身份验证器,识别的字符串,只需要把该方法返回值生成二维码扫描就可以了。 * * @param user * 账号 * @param secret * 密钥 * @return */ public static String getQRBarcode...
  • GitHub 废除基于密码的 Git 身份验证

    千次阅读 2021-08-16 08:52:43
    从 09:00 PST (PST是北美太平洋标准时间,北京时间 14 日 0 点)开始,使用 GitHub 开发者将需要切换到基于令牌的身份验证去执行 Git 操作,基于令牌的认证包括个人接入、OAuth、SSH Key 活 GitHub App 安装令牌。...
  • 谷歌身份验证器小白篇

    万次阅读 2019-10-29 08:55:38
    今天小白尝试了下谷歌身份验证器,记录下体会,谷歌身份验证器主要采用的是用户端跟后端独立生成验证码。验证码生成规则中有两个东西非常重要,一个是秘钥,一个时间,如果其中任意一个对不上,都会导致前后端验证码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 418,995
精华内容 167,598
关键字:

身份验证