今天给各位分享三网网站源码分享的知识,其中也会对网站三网合一进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
你有没有参加过必须出示身份证才能证明你是买票的人的活动?索要身份的行为是一种身份验证形式,以便您获得进入的授权。
在网络上,这个过程以类似的方式工作。为了请求某些服务或访问特定页面,您需要以某种方式表明自己的身份,并且这种身份证明必须是安全且唯一的。
在本文中,您将了解JWT(“JSONWebTokens”的首字母缩写词)标准是用于身份验证的,它在Web上被广泛使用。
什么是令牌?
如今,我们经常听到与NFT、元宇宙、加密货币等相关的代币一词。但在这个宇宙之外,代币是数字签名、密钥。
当您在银行开户时,您需要设置密码和您的个人数据。这些数据被转换为一个数字签名,该签名将唯一地识别您对该银行的身份,并且每次您访问您的银行并输入您的密码和个人数据时,银行都会理解并确认您是那个登录用户,类似于我们如何当我们出示身份证件时进入活动。
有几种算法和标准可以将您的信息转换为令牌,即对您当前尝试访问的服务或应用程序有意义的唯一身份验证密钥。一个这样的标准是JWT,它是安全的,因为它允许通过签名令牌在两方之间进行身份验证。
什么是智威汤逊?
JWT是RFC7519定义的身份验证和信息交换标准。在其中,可以安全、紧凑地存储JSON对象。此令牌是Base64代码,可以使用密钥或私钥/公钥对进行签名。
签名令牌可以验证其中包含的信息的完整性,这与隐藏此信息的加密令牌不同。如果JWT由公钥/私钥对签名,则签名证明拥有私钥的一方是实际签署它的一方。
JWT是如何创建的?
它是一系列规格的一部分:JOSE系列。
JOSE代表JSON对象签名和加密。JWT是这个规范系列的一部分,代表令牌。您可以在下面看到该系列的其他规格:
JWT(JSONWebTokens):代表令牌本身JWS(JSONWebSignature):代表token的签名JWE(JSONWebEncryption):表示用于加密令牌的签名JWK(JSONWebKeys):代表签名的密钥JWA(JSONWebAlgorithms):表示用于签署令牌的算法
现在您已经了解了JWT是什么、它的用途以及何时使用它,让我们更深入地了解它的工作原理以及JWT的组件是什么。
JSONWebToken的基本组件
JWT具有由标头、有效负载和签名组成的基本结构。这三个部分由点分隔。所以它看起来像这样:header.payload.signature。让我们更好地了解这些部分!
标题
令牌的标头基本上是我们传递两条信息的地方:alg告诉我们使用哪种算法来创建签名,typ指示什么类型的令牌。
{\n&34;:&34;,\n&34;:&34;\n}
有效载荷
有效负载是我们可以找到身份验证数据(例如密码和电子邮件)的组件。
{\n&34;:&34;,\n&34;:&34;\n}
签名
令牌签名是通过对标头和有效负载加上密钥进行编码而生成的,并由标头中指定的算法生成。
HS256SHA256(base64UrlEncode(header)+&34;+base64UrlEncode(payload),secret_key)
结果是三个点分隔的字符串,可以在HTML环境和HTTP协议中轻松使用。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.\neyJlbWFpbCI6Im5hbWVAZXhhbXBsZS5jb20iLCJwYXNzd29yZCI6ImFnRWFzdHZJZGVycyJ9.\nstLcZmJGIeGXw_HY9c8A28E9n-B-GLsXYZABCuNA0XA
创建JWT令牌
首先,让我们在您想要的目录中创建一个名为jwt的文件夹。使用您选择的名称创建一个javascript文件,我使用的是index.js。
然后,安装您选择的jwt库。有几个库可以帮助您生成JWT。我将使用最流行的jsonwebtoken之一,但您可以随意探索其他选项。
第一步是在我们的文件中导入lib:
constjwt=require(&39;);
现在我们创建我们的密钥。这个想法是只有您知道您的密钥,并且很难进行恶意攻击。但它实际上可以是您选择的任何字符串。这是我的样子:
constsecretKey=&39;;
现在让我们使用sign方法创建我们的令牌。此方法按此顺序接受有效负载、密钥和标头作为参数。
constmyToken=jwt.sign(\n{\nemail:&34;,\npassword:&34;,\n},\nsecretKey,\n{\nexpiresIn:&34;,\nsubject:&34;,\n}\n);
对于这个JWT,我在有效负载中输入了电子邮件和密码;我的密钥;在标题中,我输入了一个主题,在这个例子的库中,它就像一个id。另外我是说我们的代币将在1年内到期。默认情况下,加密算法为HS256。
现在,如果我们将此令牌记录到终端,我们应该会看到以下内容:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im5hbWVAZXhhbXBsZS5jb20iLCJwYXNzd29yZCI6ImFnRWFzdHZJZGVycyIsImlhdCI6MTY2MTU0ODMwNCwiZXhwIjoxNjkzMTA1OTA0LCJzdWIiOiIxIn0.bYWpwadW8xgstrSydwpnGnQExYuFxLMBh3JQRvtEPmw
验证我们的JWT令牌
为了验证我们的令牌,我们可以使用jsonwebtoken库本身中的一个方法,称为decode传递生成的令牌。
constgeneratedToken=&39;;console.log(jwt.decode(generatedToken))
代码的输出是:
{\nemail:&34;,\npassword:&34;,\niat:1661548304,\nexp:1693105904,\nsub:&34;\n}
其中iat、exp和sub参数分别是创建和过期日期,采用UTC格式,创建令牌的时间和过期时间,以及我们在代码中传递的值为1的主题。
现在,您可能会问自己,“既然我知道JSONWebToken是什么以及它是如何工作的,那么如何在我的前端应用程序中使用它?”
使用令牌进行身份验证
想象一下,您是一名开发人员,正在为一家银行创建应用程序的前端。例如,在登录页面上,您获取用户数据并使用fetch将其发送到API。
fetch(`${baseUrl}/auth/login`,{\nmethod:&34;,\nheaders:{\n&34;:&34;,\n},\nbody:user,\n})\n.then((res)=>{\n…\n})\n.catch((err)=>{\n…\n});
服务器将获取此数据并返回一个标识该用户的令牌。现在,每次该用户登录平台时,他都会进行身份验证,如果数据一切正常,他将被授权访问应用程序的某些区域,例如查看余额。通常这种加密和令牌生成由后端完成,但您需要确保此登录用户可以继续访问应用程序的其他区域。
您还可以将令牌保存在浏览器的会话存储或本地存储中,以确保只要令牌没有过期,用户就会保持登录到应用程序。此外,重要的是,在登录时,用户会被重定向到主页,在那里他可以看到应用程序的其他功能。
例如,当此用户尝试访问显示其余额的页面时,您可以发出请求,使用fetch在标头中传递带有生成令牌的“授权”字段。这将导致服务器检查是否允许用户访问该特定页面。
fetch(`${baseUrl}/balance`,{\nheaders:{\n&34;:Token,\n}\n})\n.then((res)=>{\n…\n})\n.catch((err)=>{\n…\n});
结论
在本文中,您了解了JSONWeb令牌是什么、它们的用途、它们的组件是什么以及如何在您的应用程序中使用它们。您还了解了如何在前端应用程序中使用令牌进行用户身份验证。
谢谢阅读!喜欢我的内容请关注我,欢迎互动。祝你有美好的一天,很快再见!
关注七爪网,获取更多APP/小程序/网站源码资源!
关于三网网站源码分享的内容到此结束,希望对大家有所帮助。
