学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

news2025/1/20 6:36:09

  重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。
  重新编写login函数,之前测试Cookie和Session认证时用的函数适合mvc模式,WebApi项目下函数返回的是状态码及其它信息,直接将开源博客Blog项目中的ApiResult类照搬过来,如果登录成功则将token保存到Msg属性中返回客户端。login函数的主要代码如下(用户名及密码验证还是写死的,后续再调整成从数据库中查询):

public async Task<ApiResult> Login([FromBody]UserInfo info)
{
    if (info.Name == "gc_2299" && info.Password == "XXXXXX")
    {
        ApiResult result = new ApiResult();
        result.UserName = info.Name;
        result.Msg=GetToken(info.Name);
        return result;
    }
    else
    {
        return new ApiResult("身份验证失败", 500, false);
    }
}

private string GetToken(string name)
{
    List<Claim> claims = new List<Claim>();
    claims.Add(new Claim(ClaimTypes.Name, name)); 

    DateTime expres = DateTime.Now.AddSeconds(_jwtconfig.Value.Expres);
    byte[] secbyse = Encoding.UTF8.GetBytes(_jwtconfig.Value.Key);

    var secKey = new SymmetricSecurityKey(secbyse);
    var credetials = new SigningCredentials(secKey, SecurityAlgorithms.HmacSha256);

    var tokenDescriptor = new JwtSecurityToken(claims: claims, expires: expres, signingCredentials: credetials, issuer:_jwtconfig.Value.Issuer, audience: _jwtconfig.Value.Audience);

    return new JwtSecurityTokenHandler().WriteToken(tokenDescriptor);
}

  前端登录页面也是直接复制的开源博客Blog项目中的后台登录页面,简化了不少东西。不过没法直接用它的js代码(使用jQuery的post方法调不到后台的login函数,暂时不清楚怎么回事儿,网上很多示例都是用的ajax,所以改成了ajax),将登录函数的js代码修改如下:

layui.use(['layer', 'form'], function () {
    var layer = layui.layer;
    var form = layui.form,
    $ = layui.jquery;

    form.on("submit(login)",
        function (data) {
            login();
        });

    function login() {
        var $btn = $("#btnLogin");
        $btn.text("登录中...").attr("disabled", "disabled").addClass("layui-disabled");
        var parm = {};
        $("form input").each(function () {
            parm[$(this).attr("name")] = $(this).val();
        });              

        $.ajax({
            type: 'POST',
            url: 'https://localhost:7051/Login/Login',
            contentType: 'application/json',
            data: JSON.stringify(parm),
            success: function (result) {
                if (result.statusCode == 200) {
                    layer.msg("登录成功,欢迎" + result.userName +",你的token=" + result.msg);
                    sessionStorage.setItem("user", result.userName)
                    sessionStorage.setItem("token", result.msg);
                }
                else
                {
                    layer.msg("登录失败,错误消息为:" + result.msg);
                }
                
                $btn.text('登录').removeClass("layui-disabled").removeAttr("disabled");
            },
            error: function () {
                layer.msg("登录失败");
                $btn.text('登录').removeClass("layui-disabled").removeAttr("disabled");
            }
        });
    }
});      

  最后是登录效果,截图如下:
在这里插入图片描述

  从浏览器的会话存储空间中可以看到登录成功后保存的用户名及token,便于其它页面使用。
在这里插入图片描述

参考文献:
[1]https://www.jianshu.com/p/a2804e72d296
[2]https://blog.csdn.net/sD7O95O/article/details/85043160
[3]https://www.cnblogs.com/qiongkangle/p/13347283.html
[4]https://www.cnblogs.com/xbhp/p/17401507.html
[5]https://www.cnblogs.com/superstar/p/16491428.html
[6]https://blog.csdn.net/weixin_44877917/article/details/140609294
[7]https://blog.csdn.net/qq_40287041/article/details/143368882

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron实践继续

文章目录 前言一、知识储备前提二、开发工具集&#xff08;一&#xff09;代码编辑器之选&#xff08;二&#xff09;命令行工具运用&#xff08;三&#xff09;Git 与 GitHub 协作利器&#xff08;四&#xff09;Node.js 与 npm 核心环境 你的第一个Electron应用程序 前言 上…

《自动驾驶与机器人中的SLAM技术》ch8:基于预积分和图优化的紧耦合 LIO 系统

和组合导航一样&#xff0c;也可以通过预积分 IMU 因子加上雷达残差来实现基于预积分和图优化的紧耦合 LIO 系统。一些现代的 Lidar SLAM 系统也采用了这种方式。相比滤波器方法来说&#xff0c;预积分因子可以更方便地整合到现有的优化框架中&#xff0c;从开发到实现都更为便…

【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮

1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度&#xff0c;来添加对应的按钮和样式&#xff1b;使用 CSS 的浮动效果&#xff0c;参考CSS 实现超过固定高度后出现展开折叠按钮&#xff1b;使用容器查询 – container 语法&#xff1b;使用 clamp 函数进行样式判断。 3. 优…

【C语言】_字符串拷贝函数strcpy

目录 1. 函数声明及功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;基本功能判空const修饰 4.2 第二版&#xff1a;优化对于\0的单独拷贝 4.3 第三版&#xff1a;仿strcpy的char*返回值 1. 函数声明及功能 char * strcpy ( char * destination, cons…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

快速入门:如何注册并使用GPT

文章目录 ProtonMail邮箱步骤 1&#xff1a;访问Proton官网步骤 2&#xff1a;创建ProtonMail账户步骤 3&#xff1a;选择注册免费账户步骤 4&#xff1a;填写邮箱地址和手机号&#xff08;可选&#xff09;步骤 5&#xff1a;邮箱验证&#xff08;必须进行验证&#xff09;步骤…

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…

Vulnhub DC-8靶机攻击实战(一)

导语   Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…

自学SpringBoot笔记

概念 什么是SpringBoot&#xff1f; Spring Boot 是基于 Spring Framework 的一款开源框架&#xff0c;主要用于简化 Spring 应用程序的开发。它通过提供一系列的 开箱即用的功能 和 自动配置&#xff0c;让开发者可以快速构建生产级别的独立应用程序&#xff0c;而无需手动配…

通过学习更多样化的生成数据进行更广泛的数据分发来改进实例分割

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 本次使用的英文整理的一些记录&#xff0c;练习一下为后续SCI发表论文打好基础 Improving Instance Segmentation by Learning Wider Data Distribution with More Diverse Generative Data Abstract In…

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…

提示词的艺术----AI Prompt撰写指南(个人用)

提示词的艺术 写在前面 制定提示词就像是和朋友聊天一样&#xff0c;要求我们能够清楚地表达问题。通过这个过程&#xff0c;一方面要不断练习提高自己地表达能力&#xff0c;另一方面还要锻炼自己使用更准确精炼的语言提出问题的能力。 什么样的提示词有用&#xff1f; 有…

自定义提示确认弹窗-vue

最初可运行代码 弹窗组件代码&#xff1a; &#xff08;后来发现以下代码可运行&#xff0c;但打包 typescript 类型检查出错&#xff0c;可打包的代码在文末&#xff09; <template><div v-if"isVisible" class"dialog"><div class&quo…

【JavaEE】Spring(1)

一、什么是Spring和SpringBoot Spring是Java应用程序的开发框架&#xff0c;其目的就是为了简化Java开发&#xff1b;SpringBoot是在spring框架的基础上构建的一个快速开发框架&#xff0c;其作用是进一步简化Spring程序开发 二、SpringBoot项目 2.1 创建项目 1. 设置jdk版本…

【Rust自学】13.4. 闭包 Pt.4:使用闭包捕获环境

13.4.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

浅谈操作系统与初识Linux

一、Linux操作系统的出现 1.1操作系统的出现以及相关的四个要素 1.2最早出现的操作系统及其创始人 起初&#xff0c;IBM为了让计算机可以以更低技术成本进行使用&#xff0c;以此来售卖计算机&#xff1b; 为计算机搭载上了Unix操作系统&#xff0c;Unix由肯汤普森用汇编语…

K8S开启/关闭审计日志

K8S默认禁用审计 开启/关闭 k8s 审计日志 默认 Kubernetes 集群不会输出审计日志信息。通过以下配置&#xff0c;可以开启 Kubernetes 的审计日志功能。 准备审计日志的 Policy 文件配置 API 服务器&#xff0c;开启审计日志重启并验证 准备审计日志 Policy 文件 apiVersio…

深入探讨DICOM医学影像中的MPPS服务及其具体实现

深入探讨DICOM医学影像中的MPPS服务及其具体实现 1. 引言 在医疗影像的管理和传输过程中&#xff0c;DICOM&#xff08;数字影像和通信医学&#xff09;标准发挥着至关重要的作用。除了DICOM影像的存储和传输&#xff08;如影像存储SCP和影像传输SCP&#xff09;&#xff0c;…

VGG (Visual Geometry Group) :深度卷积神经网络的图像识别利器

前言 在深度学习的蓬勃发展历程中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;为图像识别领域带来了革命性的突破。而 VGG&#xff08;Visual Geometry Group&#xff09;作为其中的杰出代表&#xff0c;凭借其简洁而高效的…