在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权

作者:神秘网友 发布时间:2021-02-22 08:51:23

在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权

本文承接上一篇在Asp.Net Core Web API中使用JWT鉴权(1)创建鉴权中心。

1、创建Asp.Net Core Web API项目

这里使用的环境是VS2019 + .Net Core 3.1。
2、在Startup中注册JWT鉴权
(1) 使用Nuget安装Microsoft.AspNetCore.Authentication.JwtBearer。
(2) 注册JWT鉴权

#region 注册JWT鉴权
var issuer = Configuration["issuer"];
var audience = Configuration["audience"];
var securityKey = Configuration["SecurityKey"];
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) //默认授权机制名称
    .AddJwtBearer(options =
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true, //是否验证Issuer
            ValidateAudience = true, //是否验证Audience
            ValidateLifetime = true, //是否验证失效时间
            ValidateIssuerSigningKey = true, //是否验证IssuerSigningKey
            ValidAudience = audience,
            ValidIssuer = issuer,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey)),
            //自定义校验规则:新登录后,之前的token无效
            //AudienceValidator = (audiences, securityToken, validationParameters) =
            //{
            //    return audiences != null  audiences.FirstOrDefault().Equals(audience);
            //}
        };
    });
#endregion

(3) 启用鉴权中间件

//启用鉴权中间件
app.UseAuthentication();

3、添加JWT配置信息(appsettings.json)

"issuer": "http://localhost:9527",
"audience": "http://localhost:9527",
"SecurityKey": "4A9A70D2-B8AD-42E1-B002-553BDEF4E76F"

注意issuer、audience、SecurityKey要和鉴权中心的配置保持一致。

4、在控制器的接口中使用[Authorize]属性

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq;
using System.Security.Claims;

namespace TestWebApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        [HttpGet]
        [Route("GetAuthData")]
        [Authorize]
        public IActionResult GetAuthData()
        {
            var claims = HttpContext.AuthenticateAsync().Result.Principal.Claims;
            var name = claims.FirstOrDefault(t = t.Type.Equals(ClaimTypes.Name)).Value;
            var exp = claims.FirstOrDefault(t = t.Type.Equals("exp")).Value;

            var expDateTime = DateTime.Now;
            if (!string.IsNullOrWhiteSpace(exp))
            {
                long expValue;
                if (long.TryParse(exp, out expValue))
                {
                    expDateTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.Local);
                    expDateTime = expDateTime.AddSeconds(expValue);
                }
            }

            Console.WriteLine($"name: {name}, expDateTime: {expDateTime}");

            return new JsonResult(new
            {
                ExpDateTime = expDateTime,
                Name = name,
                Data = "已授权",
                Type = "GetAuthorizeData"
            });
        }
    }
}

5、运行

(1) 运行Web API项目,在Postman中输入http://localhost:5000/api/Test/GetAuthData,正常情况下会有401 Unauthorized错误。
(2) 在Postman的Authorization选项卡中选择"Bearer Token",并输入鉴权中心登录后的token,正常情况下会输出类似下面的内容:

{
    "expDateTime": "2021-02-22T10:02:25+08:00",
    "name": "admin",
    "data": "已授权",
    "type": "GetAuthorizeData"
}

在Asp.Net Core Web API中使用JWT鉴权(2)使用JWT鉴权 相关文章

  1. webpack require.context实现自动动态加载组件

    简化import 或者export各种模块 require.context(directory,useSubdirectories,regExp) 1 directory 要查找的文件路径 2 useSubDirectories 是否查找子目录 3 regExp 要匹配文件的正则 require.context('',true,/\.js$/); 返回: 1 var map = { 2 "./A.js":

  2. webpack 学习笔记系列04-资源处理优化

    webpack 学习笔记系列04-资源处理优化 Write By CS逍遥剑仙我的主页: csxiaoyao.comGitHub: github.com/csxiaoyaojianxianEmail: sunjianfeng@csxiaoyao.comQQ: 1724338257 1. 配置 typescript1.1 tsconfig.json 新建 ts 文件: // hello.tsfunction sayHello

  3. webpack 学习笔记系列05-devserver

    webpack 学习笔记系列05-devserver Write By CS逍遥剑仙我的主页: csxiaoyao.comGitHub: github.com/csxiaoyaojianxianEmail: sunjianfeng@csxiaoyao.comQQ: 1724338257 1. Webpack Dev Server1.1 命令行使用 webpack-dev-server 是一个小型的 express 服务器

  4. Linux系统下安装weblogic详细步骤

    1、环境探查与准备 安装jdk和weblogic前需要对进行安装的linux系统硬件和软件环境进行探查确认,以确保支持对jdk1.8和weblogic12.2.1.4的安装。weblogic12.2.1.4对于jdk及linux操作系统版本的要求在oracle官网上面有详细的详细全面介绍,可自己进行下载xls查

  5. web框架的构建

    web框架的构建 web框架的整体目录 一个简单的helloworld maintain/main.go package mainimport ("Suehoo/controller""log""net/http")func main(){ http.HandleFunc("/TestGo",controller.TestGo) err :=http.ListenAndServe(":8005",nil) if err!=nil{ log.

  6. webpack-dev-server 源码

    webpack-dev-server 简介 Use webpack with a development server that provides live reloading. This should be used for development only. It uses webpack-dev-middleware under the hood, which provides fast in-memory access to the webpack assets

  7. web框架的整体

    web框架的构建 web框架的整体目录 一个简单的helloworld maintain/main.go package mainimport ("Suehoo/controller""log""net/http")func main(){ http.HandleFunc("/TestGo",controller.TestGo) err :=http.ListenAndServe(":8005",nil) if err!=nil{ log.

  8. 01-Spring与Web环境集成

    1. Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这样

  9. ASP.NET Core获取请求完整的Url

    在ASP.NET项目中获取请求完整的Url: 获取System.Web命名空间下的类名为HttpRequestBase的Url方法: /// summary在派生类中替代时,获取有关当前请求的 URL 的信息。/summary /// returns包含有关当前请求的 URL 的信息的对象。/returns /// exception cref=

  10. ASP.NET Core WebApi版本控制

    前言: 在日常项目开发中,随着项目需求不断的累加、不断的迭代;项目服务接口需要向下兼容历史版本;前些时候就因为Api接口为做版本管理导致接口对低版本兼容处理不友好。 最近就像了解下如何实现WebApi版本控制,那么版本控制有什么好处呢 WebApi版本控制

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词