华域联盟 .Net 手把手教你AspNetCore WebApi认证与授权的方法

手把手教你AspNetCore WebApi认证与授权的方法

手把手教你AspNetCore WebApi认证与授权的方法
 更新时间:2020年10月12日 09:53:27   作者:深度码农  

这篇文章主要介绍了手把手教你AspNetCore WebApi认证与授权的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言
这几天小明又有烦恼了,之前给小红的接口没有做认证授权,直接裸奔在线上,被马老板发现后狠狠的骂了一顿,赶紧让小明把授权加上。赶紧Baidu一下,发现大家都在用JWT认证授权,这个倒是挺适合自己的。
什么是Token
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
什么是JWT
Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT认证流程

从图中可以看出主要有两部分组成:1、获取Token,2、通过Token进行授权。
使用JWT认证
首先,安装JwtBearer包。

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer --version 3.1.0

接下来,定义一个配置类,我这里为了简单直接用常量代替了,你也可以放在配置文件中。

public class TokenParameter
{
public const string Issuer = "深度码农";//颁发者
public const string Audience = "深度码农";//接收者
public const string Secret = "1234567812345678";//签名秘钥
public const int AccessExpiration = 30;//AccessToken过期时间(分钟)
}

接下来,定义一个通过用户名和密码,获取Token的控制器。

[Route("api/oauth")] [ApiController] public class OAuthController : ControllerBase
{
/// <summary>
/// 获取Token
/// </summary>
/// <returns></returns>
[HttpGet] [Route("token")] public ActionResult GetAccessToken(string username, string password)
{
//这儿在做用户的帐号密码校验。我这儿略过了。
if (username != "admin" || password != "admin")
return BadRequest("Invalid Request");

var claims = new[] {
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Role, ""),
};

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(TokenParameter.Secret));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var jwtToken = new JwtSecurityToken(TokenParameter.Issuer, TokenParameter.Audience, claims, expires: DateTime.UtcNow.AddMinutes(TokenParameter.AccessExpiration), signingCredentials: credentials);
var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);

return Ok(token);
}
}

接下来,添加Token身份认证到容器(Startup.ConfigureServices)。

services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,//是否调用对签名securityToken的SecurityKey进行验证
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(TokenParameter.Secret)),//签名秘钥
ValidateIssuer = true,//是否验证颁发者
ValidIssuer = TokenParameter.Issuer, //颁发者
ValidateAudience = true, //是否验证接收者
ValidAudience = TokenParameter.Audience,//接收者
ValidateLifetime = true,//是否验证失效时间
};
});

接下来,添加身份认证到中间件(Startup.Configure)。

app.UseAuthentication();//必须在app.UseAuthorization();之前

接下来,控制器需要授权控制的添加[Authorize]。

[HttpGet("{id}")] [Authorize] public async Task<ActionResult<Todo>> GetTodo(Guid id)
{
var todo = await context.Todo.FindAsync(id);

if (todo == null)
{
return NotFound();
}

return todo;
}

最后,我们测试一下接口,效果如下。

这时会返回401,因为身份认证没有通过,说明身份验证起效果了。
接下来我们访问一下GetAccessToken接口,拿到Token,在访问GetTodo接口时放入Token,我们可以看到访问成功了。

小结
目前为止,小明把授权认证搞定了,赶紧给马老板汇报工作去吧。当然这个授权认证还是非常简单的,还有很多等待的小伙伴们去发掘,比如如何自动刷新Token?如何强制Token失效?OAuth其他实现方式等等?大家如果有兴趣,让小明下次告诉你们。
到此这篇关于手把手教你AspNetCore WebApi认证与授权的方法的文章就介绍到这了,更多相关AspNetCore WebApi认证与授权内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:.net core webapi jwt 更为清爽的认证详解

Net
Core
WebApi
认证
授权

相关文章
使用ASP.NET操作IIS7中应用程序IIS7的操作和IIS5/6有很大的不同,在IIS7里增加了 Microsoft.Web.Administration 命名空间里,增加了ServerManager、Site几个大类来操作IIS7。本文主要介绍.NET对IIS7的操作。 2015-10-10
如何在Asp.Net Core中集成ABP Dapper这篇文章主要介绍了如何在Asp.Net Core中集成ABP Dapper,帮助大家更好的理解和学习使用Asp.Net Core,感兴趣的朋友可以了解下 2021-03-03
Asp.Net 网站优化系列之数据库优化 分字诀 分表(纵向拆分,横向上篇谈了分库,这一篇我们来分表

2010-06-06
win7-vs2012下安装.net frame work 的过程图文详解这篇文章主要介绍了win7-vs2012下安装.net frame work 的过程图文详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 2019-05-05
ASP.NET文件上传控件Uploadify的使用方法这篇文章主要为大家详细介绍了ASP.NET文件上传控件Uploadify的使用方法,感兴趣的小伙伴们可以参考一下 2016-03-03
DataGridView中CheckBox实现某一列单选DataGridView中CheckBox实现某一列单选,需要的朋友可以参考一下 2013-02-02
asp.net音频转换之.amr转.mp3(利用七牛转换法)相信很多人都遇到amr格式的音频文件不能直接在网页播放的问题,有人使用QuickTime插件的辅助,下面这篇文章主要给大家介绍了asp.net音频转换之利用七牛转换法将.amr格式转.mp3格式,需要的朋友可以参考借鉴,下面来一起看看吧。 2016-12-12
asp.net中Fine Uploader文件上传组件使用介绍最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10]. 2013-01-01
swagger上传文件并支持jwt认证的实现方法今天通过本文给大家分享swagger上传文件并支持jwt认证的实现方法,文中提到了安装方法及实现代码,感兴趣的朋友跟随华域联盟小编一起学习吧 2018-05-05
.NET示波器控件的实例代码分析本篇文章是对.NET示波器控件进行了详细的分析介绍,需要的朋友参考下 2013-05-05

最新评论

本文由 华域联盟 原创撰写:华域联盟 » 手把手教你AspNetCore WebApi认证与授权的方法

转载请保留出处和原文链接:https://www.cnhackhy.com/5048.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部