没有合适的资源?快使用搜索试试~ 我知道了~
Jwt隐藏大坑,通过源码揭秘.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 22 浏览量
2022-07-08
23:04:42
上传
评论
收藏 3.36MB DOC 举报
温馨提示
试读
16页
Jwt隐藏大坑,通过源码揭秘.doc
资源推荐
资源详情
资源评论
Jwt 隐藏大坑,通过源码揭秘
我们都以为 Jwt 三部分是用`Base64`加密,其实不完全对,因为他确切的加密方
式是`Base64Url`加密,没有深入理解的我们只以为就是纯粹的 base64,而且在大部分情况下
确实是这样,更加坚定了我们这种错误认知。而只有当 Base64 加密后出现字符`+`或`/`时,
才会有所不同,希望对大家有帮助。
前言
JWT 是目前最为流行的接口认证方案之一,有关 JWT 协议的详细内容,请参考:
https://jwt.io/introduction
今天分享一下在使用 JWT 在项目中遇到的一个问题,主要是一个协议的细节,非常容易
被忽略,如果不是自己遇到,或者去看源码的实现,我估计至少 80%的人都会栽在这里,
下面来还原一下这个问题的过程,由于这个问题出现有一定的概率,不是每次都会出现,所
以才容易掉坑里。
集成 JWT
在 Asp.Net Core 中集成 JWT 认证的方式在网络上随便一搜就能找到一堆,主要有两个步
骤:
在 IOC 容器中注入依赖
public void ConfigureServices(IServiceCollection services)
{
// 添加这一行添加 jwt 验证:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,//是否验证 Issuer
ValidateAudience = true,//是否验证 Audience
ValidateLifetime = true,//是否验证失效时间
ClockSkew = TimeSpan.FromSeconds(30),
ValidateIssuerSigningKey = true,//是否验证 SecurityKey
ValidAudience = Const.Domain,//Audience
ValidIssuer = Const.Domain,//Issuer,这两项和前面签发 jwt 的设置一致
IssuerSigningKey = new
SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey))//拿到 SecurityKey
};
});
}
应用认证中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 添加这一行 使用认证中间件
app.UseAuthentication();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
routes.MapRoute(
name: “default”,
template: “{controller=Home}/{action=Index}/{id?}”);
});
}
在 Controller
[Route(“api/[controller]”)]
[ApiController] // 添加这一行
public class MyBaseController : ControllerBase
{
}
提供一个认证的接口,用于前端获取 token
[AllowAnonymous]
[HttpGet]
public IActionResult Get(string userName, string pwd)
{
if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(pwd))
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Nbf,$”{new
DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}”) ,
new Claim (JwtRegisteredClaimNames.Exp,$”{new
DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}”),
new Claim(ClaimTypes.Name, userName)
};
var key = new
SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: Const.Domain,
audience: Const.Domain,
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
else
{
return BadRequest(new { message = “username or password is incorrect.” });
}
}
至此,你的应用已经完成了集成 JWT 认证。
剩余15页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2836
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python开发使用深度学习去预测股票后续的价格+源码+文档(毕业设计&课程设计&项目开发)
- flowable-designer-5.22.0.zip
- threadmanager.cpp
- 腾讯云小程序 - 一站式开发与部署平台
- 基于JSP+Java+Servlet采用MVC模式开发的购物网站+源码(毕业设计&课程设计&项目开发)
- fastgestures安装包,模拟mac的触控板收拾,两指代表右击, 三指拖拽
- 基于组态王的升降式横移立体车库控制系统+源码(毕业设计&课程设计&项目开发)
- 基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
- 环境配置 vscode+jupyter
- 项目全部代码,还包含使用到的图片
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功