AspNetCore WebApi怎么认证与授权

  

<强>前言

本篇内容主要讲解“AspNetCore WebApi怎么认证与授权”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“AspNetCore WebApi怎么认证与授权”吧!


<强>什么是标记

标记是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个令牌便将此令牌返回给客户端,以后客户端只需带上这个令牌前来请求数据即可,无需再次带上用户名和密码。

<强>什么是JWT

Json web标记(JWT),是为了在网络应用环境间传递声明而执行的一种基于Json的开放标准((RFC 7519)。该令牌被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该令牌也可直接被用于认证,也可被加密。

<强> JWT认证流程

 AspNetCore WebApi怎么认证与授权

从图中可以看出主要有两部分组成:1,获取令牌,2,通过令牌进行授权。

<强>使用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过期时间(分钟)   }

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

[路线(“api/oauth")]   (ApiController)   public  class  OAuthController : ControllerBase   {   ,///& lt; summary>   ,///获取令牌   ,///& lt;/summary>   ,///& lt; returns> & lt;/returns>   ,(HttpGet)   ,(路线(“token"))   ,public  ActionResult  GetAccessToken (string 用户名,string 密码)   ,{//这才能儿在做用户的帐号密码校验。我这儿略过了。   if 才能;(username  !=,“admin", | |, password  !=,“admin")   ,,return  BadRequest (“Invalid  Request");      var 才能;claims 新[]=,   {才能   ,,new 索赔(ClaimTypes.Name,,用户名),   ,,new 索赔(ClaimTypes.Role,,““),   ,,};      var 才能;key =, new  SymmetricSecurityKey (Encoding.UTF8.GetBytes (TokenParameter.Secret));   var 才能;credentials =, new  SigningCredentials(钥匙,,SecurityAlgorithms.HmacSha256);   var 才能;jwtToken =, new  JwtSecurityToken (TokenParameter.Issuer, TokenParameter.Audience,,,,:到期,DateTime.UtcNow.AddMinutes (TokenParameter.AccessExpiration), signingCredentials:,凭证);   var 才能;token =, new  JwtSecurityTokenHandler () .WriteToken (jwtToken);      return 才能好(令牌);   ,}   }

接下来,添加牌身份认证到容器(启动。ConfigureServices)。

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

接下来,添加身份认证到中间件(启动。配置)。

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

AspNetCore WebApi怎么认证与授权