📜  JWT EM VBNET - 基本(1)

📅  最后修改于: 2023-12-03 15:02:28.409000             🧑  作者: Mango

JWT EM VB.NET - 基本介绍

什么是JWT?

JWT(JSON Web Token)是一种用于身份验证的开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来传输信息。JWT由三个部分组成:头部(Header)、有效载荷(Payload)、签名(Signature)。它们通过点号(.)分隔组成一个字符串,形如:

xxxxx.yyyyy.zzzzz

其中,xxxxx为头部,yyyyy为有效载荷,zzzzz为签名。

  • 头部(Header):表明采用的算法(如HMAC、RSA)和类型(如JWT)等信息。
  • 有效载荷(Payload):存放要传输的信息,如用户ID、过期时间等。
  • 签名(Signature):通过对头部和有效载荷进行签名生成的一段字符串,用于验证消息的完整性。
JWT的优点

相较于传统的身份验证方案,如基于Cookie的身份验证、基于Token的身份验证等,JWT具有以下优点:

  • 跨语言、跨平台兼容性好,可以在Java、Python、Ruby、PHP、.Net等多种语言和平台上使用。
  • 轻量级,占用空间小。
  • 自包含,有效载荷中包含了相关信息,不需要保存在服务器端。当服务器端需要获取相关信息时,只需解码有效载荷即可。
  • 可设置过期时间,增加安全性。
如何在VB.NET中使用JWT?

可以使用nuget包管理器在VB.NET中自动导入JWT相关类库。

下面是一个简单的示例代码。

Imports System.IdentityModel.Tokens.Jwt
Imports System.Security.Claims
Imports System.Text
Imports Microsoft.IdentityModel.Tokens

Module Module1

    Sub Main()

        ' 首先使用密钥生成令牌
        Dim token = GenerateToken()

        ' 输出令牌
        Console.WriteLine(token)

        ' 解码令牌
        Dim claims = ParseToken(token)

        ' 输出令牌的有效载荷
        Console.WriteLine(claims.First(Function(claim) claim.Type = "sub").Value)
        Console.WriteLine(claims.First(Function(claim) claim.Type = "exp").Value)

        Console.ReadKey()

    End Sub

    Function GenerateToken() As String

        ' 生成密钥
        Dim key As New SymmetricSecurityKey(Encoding.UTF8.GetBytes("your secret here"))

        ' 创建凭证
        Dim creds As New SigningCredentials(key, SecurityAlgorithms.HmacSha256)

        ' 创建有效载荷
        Dim claims As New List(Of Claim)()
        claims.Add(New Claim("sub", "123456"))
        claims.Add(New Claim("exp", DateTimeOffset.UtcNow.AddMinutes(10).ToUnixTimeSeconds().ToString()))

        ' 创建JWT token
        Dim token = New JwtSecurityToken(
            issuer: "your issuer here",
            audience: "your audience here",
            claims:=claims,
            expires:=DateTimeOffset.UtcNow.AddMinutes(10),
            signingCredentials:=creds)

        ' 返回JWT token字符串
        Return New JwtSecurityTokenHandler().WriteToken(token)

    End Function

    Function ParseToken(tokenString As String) As IEnumerable(Of Claim)

        ' 生成密钥
        Dim key As New SymmetricSecurityKey(Encoding.UTF8.GetBytes("your secret here"))

        ' 解密JWT token
        Try
            Dim handler As New JwtSecurityTokenHandler()
            Dim validations = New TokenValidationParameters() With {
                .ValidateIssuerSigningKey = True,
                .ValidateLifetime = True,
                .ValidateIssuer = True,
                .ValidateAudience = True,
                .ValidIssuer = "your issuer here",
                .ValidAudience = "your audience here",
                .IssuerSigningKey = key}

            Dim claimsPrincipal = handler.ValidateToken(tokenString, validations, Nothing)

            Return claimsPrincipal.Claims

        Catch ex As Exception
            Throw New SecurityException("Invalid token.", ex)
        End Try

    End Function

End Module

以上代码中,首先使用GenerateToken()函数生成JWT令牌,然后使用ParseToken()函数解码令牌,获取有效载荷中的信息。

总结

本文介绍了JWT的基本概念、优点及在VB.NET中使用JWT的方法,希望对读者有所帮助。关于JWT的更多内容,可以参考以下链接: