物流信息 缺少jwt参数_ASP.NET CORE 简单实现JWT授权认证
JWT介绍(jwt官方网址:https://jwt.io/)授权认证是保护我们系统API资源的重要环节,如果不加授权认证那么你的API资源可以在网上被别人随便访问,JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。JWT中包含了身份认证必须...
JWT介绍
(jwt官方网址:https://jwt.io/)
授权认证是保护我们系统API资源的重要环节,如果不加授权认证那么你的API资源可以在网上被别人随便访问,JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
JWT结构:
①Header 头
②Payload 有效载荷
③Signature 签名
(一) Header:
标头通常由两部分组成:令牌的类型,即JWT,以及正在使用的签名算法,例如HMAC SHA256或RSA。
例如:
{"alg": "HS256","typ": "JWT"
}
(二)Payload:
Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。
-
iss (issuer):签发人
-
exp (expiration time):过期时间
-
sub (subject):主题
-
aud (audience):受众
-
nbf (Not Before):生效时间
-
iat (Issued At):签发时间
-
jti (JWT ID):编号
除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。例如:
{"sub": "1234567890","name": "John Doe","admin": true
}
注意,JWT 默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。这个 JSON 对象也要使用 Base64URL 算法转成字符串。
(三)Signature:
Signature 部分是对前两部分的签名,防止数据篡改。
首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
签名用于验证消息在此过程中未被更改,并且,在使用私钥签名的令牌的情况下,它还可以验证JWT的发件人是否是它所声称的人。
Visual Studio 2019开发工具进行JWT授权认证功能实现
一:创建asp.net core 应用程序
第一步:选择asp.net core web 应用程序 点击下一步。

第二步:输入项目名称和解决方案名称(注:名称不要输入中文,以免发生错误)

第三步:这里我们使用的是asp.net core 3.1版本,然后选择API,这里我们把https这个选项勾掉,然后点击创建。

这里创建完成之后大概是这个样子的

第四步:首先,我们创建一个Const类来保存我们的密钥和颁发者地址,密钥是用生成工具生成的这里是写死的,这两个参数还可以写在我们的配置文件里launchSettings.json),这里只是一个简单的实现就不做那么细致了。

第五步:添加一个AuthController,API控制器,这里主要是模拟我们的一个登录功能,这里只是简单的验证了一下密码是否为空,和是否是指定的用户和密码,验证通过后再去生成访问令牌。这里其实可以写一个单独的颁发令牌的API,当程序运行时首先访问这个API拿到token.

第六步:在Startup.cs启动类中注入JWT服务,并且在中间件管道中启用Authenticaiton中间件,注意认证中间件UseAuthentication 要写在UseAuthorization前面

第六步:创建一个测试的API,其中一个方法打上权限校验特性标签。

测试
这里我们使用PostMan工具测试一下,首先在再未授权的情况下请求API,可以看到的是,状态码为401,提示我们Unauthorized,未授权。

接下来我们使用模拟登录一下,先拿到TOKEN,再去访问API,这里我没有添加用户名和密码所以提示我们用户名或密码不正确。

然后我们在请求体中在参数中添加上我们的用户名(uname)和密码(pwd)并且给上正确的值,最后我们成功的拿到了我们访问令牌(Token)
示例:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOiIxNTkyMDk3NDUzIiwiZXhwIjoxNTkyMDk5MjUzLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoidGlhbiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMCIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMCJ9.itzJhSLbIckTp_VM71Za4K20Ng0lAqeGlAZQ2zVmHEQ"
}

我们拿着Token 去请求刚才的API,首先我们要在授权体里面插入我们的Token值,这里Postman授权类型选择Bearer Token

现在我们看到了我们的状态码是200,提示是OK,代表着我们已经通过授权认证并且拿到了返回值。
返回值示例:
[
"value",
"这是通过授权认证的值"
]

好了,今天的教程就到这里,如果你喜欢的话记得关注我的公众号,然后点击在看,记得帮我宣传宣传哟,谢谢!


更多推荐


所有评论(0)