有人可以告诉我基本认证和JWT令牌之间的区别吗?

4

在我们的项目中,我负责Angular 8的UI部分,后端是使用JAVA开发的。两者将部署在同一Windows服务器上。 目前,我们正在使用基本身份验证来验证用户并访问不同的REST URL。由于我是新手,所以对JWT令牌的了解不多。 那么,有人能解释一下使用基本身份验证和JWT令牌之间的区别吗?当后端和前端都部署在同一服务器上时,我们是否需要JWT令牌?

当前项目中基于基本身份验证的用户验证示例代码...

LoginAuthorisation(logindata: LoginData) {
    let authrizationdata = logindata.inputEmail+":"+logindata.inputPassword;
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type':  'application/json',
        Authorization: 'Basic ' + btoa(authrizationdata),
      }),
      observe: "response" as const,
      withCredentials: true 
    };
    const body = { "message": "Test Data"}
    console.log(httpOptions);
    return this.http.post<any>('http://*****************/home',body,httpOptions);
  }
1个回答

4

这是一个非常广泛的问题,但我来试试。

什么是基本认证?

通常我们所说的基本认证是HTTP的基本认证,即:在HTTP事务的上下文中,基本访问认证是为HTTP用户代理(例如Web浏览器)提供用户名和密码以进行请求的方法。在基本HTTP身份验证中,请求包含一个授权形式的头字段,其中凭据是ID和密码通过单个冒号连接的Base64编码(维基百科)。

重点:客户端将其凭据发送到服务器进行验证。

什么是基于JWT的身份验证?

然而,这不是一个好主意。通常情况下,您不想发送您的凭据。相反,您想要发送一个代表您的权限/权利与服务器通信的令牌。这就是JWT的作用。JWT代表JSON Web Token。您的身份服务器生成证明用户身份的令牌,并将其发送到客户端。客户端将为每个后续请求发送令牌回服务器,因此服务器知道该请求来自特定的身份。

现在了解JWT有助于理解它来自OAuth 2.0和OpenID Connect,它们是构建用于避免“密码反模式”即必须共享您的凭据的授权/身份验证协议。

请访问类似oauth.tools或jwt.io的网站以获取更多信息。

基于JWT的身份验证正在成为API身份验证的事实标准,而不是用户名密码。

资源


嗨,感谢您的输入。我有点困惑,当我的用户第一次输入其凭据时,我需要检查它是否正确,以确保其凭据与数据库匹配。在基本身份验证中,我直接将其作为编码值发送,但在JWT令牌中该怎么做呢? - charchita1313
1
请查看我添加的附加链接。实质上,您需要查看为您发行JWT令牌的授权服务器,因为它们将拥有一个API,您可以使用该API来检索JWT。 - David Brossard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接