ASP.NET Core MVC 中实现 API 请求认证(使用 HMAC)、用户认证与授权以及 Web Token(JWT)认证

HTTP API 认证技术详解(四):HMAC Authentication HMAC(Hash-based Message Authentication Code)认证是一种被广泛使用的技术,用于验证消息的完整性和真实性。HMAC 结合了哈希函数和加密密钥,比单纯的哈希更安全。在网络通信和数据存储中,HMAC 可以确保传输的数据未被篡改,并验证消息发送者的身份。 阅读详情

在 ASP.NET Core MVC 中实现 API 请求认证(使用 HMAC)、用户认证与授权以及 Web Token(JWT)认证时,可以按照以下步骤实现:

1. HMAC(Hash-based Message Authentication Code)认证

HMAC 认证用于确保 API 请求的完整性和认证。通过计算请求消息和密钥的 HMAC 值来验证请求的合法性。

后端实现(ASP.NET Core)

首先,创建一个 HMAC 服务类,用于计算和验证 HMAC 签名。

public interface IHmacService
{
    string GenerateHmac(string message, string secretKey);
    bool VerifyHmac(string message, string receivedHmac, string secretKey);
}

public class HmacService : IHmacService
{
    public string GenerateHmac(string message, string secretKey)
    {
        using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey)))
        {
            var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
            return Convert.ToBase64String(hash);
        }
    }

    public bool VerifyHmac(string message, string receivedHmac, string secretKey)
    {
        var computedHmac = GenerateHmac(message, secretKey);
        return computedHmac == receivedHmac;
    }
}

在 Startup.cs 中注册服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IHmacService, HmacService>();
}
API 控制器中的 HMAC 验证

在 API 控制器中,你可以使用 HmacService 来验证请求中的 HMAC 签名。

[ApiController]
[Route("api/[controller]")]
public class ApiController : ControllerBase
{
    private readonly IHmacService _hmacService;
    private readonly string _secretKey = "YourSecretKey";  // 可以从配置文件中读取

    public ApiController(IHmacService hmacService)
    {
        _hmacService = hmacService;
    }

    [HttpPost]
    public IActionResult Post([FromBody] string data, [FromHeader(Name = "X-HMAC-Signature")] string receivedHmac)
    {
        if (_hmacService.VerifyHmac(data, receivedHmac, _secretKey))
        {
            // HMAC 验证成功
            return Ok("Request authenticated.");
        }
        else
        {
            // HMAC 验证失败
            return Unauthorized("Invalid HMAC.");
        }
    }
}
前端发送带 HMAC 的请求

在前端,你需要计算消息的 HMAC 并将其添加到请求头中。

function calculateHmac(message, secretKey) {
    const encoder = new TextEncoder();
    const data = encoder.encode(message);
    const key = encoder.encode(secretKey);
    
    return crypto.subtle.importKey("raw", key, { name: "HMAC", hash: "SHA-256" }, false, ["sign", "verify"])
        .then(key => crypto.subtle.sign("HMAC", key, data))
        .then(signature => {
            return btoa(String.fromCharCode(...new Uint8Array(signature)));
        });
}

const message = JSON.stringify({ /* data to send */ });
const secretKey = "YourSecretKey";  // The secret key should match the server's secret key

calculateHmac(message, secretKey).then(hmac => {
    fetch("https://yourapi.com/api/endpoint", {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
            "X-HMAC-Signature": hmac
        },
        body: message
    });
});

2. 用户认证与授权(JWT)

后端实现(ASP.NET Core)
  1. 安装必要的 NuGet 包:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
  1. 在 Startup.cs 配置 JWT 认证:
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = "yourIssuer",
                    ValidAudience = "yourAudience",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"))
                };
            });

    services.AddControllers();
}
  1. 创建 JWT 生成器服务:
public class JwtService
{
    private readonly string _secretKey = "YourSecretKey";

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

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_secretKey));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            issuer: "yourIssuer",
            audience: "yourAudience",
            claims: claims,
            expires: DateTime.Now.AddHours(1),
            signingCredentials: creds
        );

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}
  1. 在登录时生成 JWT:
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
    if (IsValidUser(model))  // Check username/password from your database
    {
        var token = _jwtService.GenerateToken(model.Username);
        return Ok(new { Token = token });
    }
    return Unauthorized();
}
  1. 在 API 控制器中使用 [Authorize] 特性来保护路由:
[Authorize]
[HttpGet]
public IActionResult GetProtectedData()
{
    return Ok("This is a protected resource.");
}
前端发送带 JWT 的请求

在前端,当用户登录成功后,你会收到一个 JWT。之后需要将它作为 Authorization header 添加到所有 API 请求中。

const token = "YourJWTToken";  // This should be saved securely, e.g., in localStorage or sessionStorage

fetch("https://yourapi.com/api/protected", {
    method: "GET",
    headers: {
        "Authorization": `Bearer ${token}`
    }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log(error));

总结

  1. HMAC认证:通过计算消息的 HMAC 签名来验证请求的完整性。
  2. 用户认证与授权:使用 JWT 进行认证,并通过授权验证用户身份。
  3. Web Token认证(JWT):通过生成和验证 JWT 来处理用户认证和授权。
JWT在.NET Core中的认证实践与安全配置 JSON Web Token(JWT)作为一种轻量级的认证机制,在现代Web开发中因其无状态、跨域支持等特性被广泛应用。其核心原理是通过数字签名(如HS256或RS256算法)确保Token的完整性和安全性,采用标准化的Header.Payload.Signature结构实现信息自包含。在技术价值层面,JWT显著降低了服务端会话存储压力,提升了系统扩展性,同时简化了前后端协作流程。典型的应用场景包括API认证、微服务间通信以及单点登录系统。在.NET Core生态中,通过Microsoft.AspNetCo 阅读详情

相关推荐

API接口鉴权深度剖析:OAuth2.0、API Key与HMAC的适用场景

OAuth 2.0 是一种开放标准的授权协议,主要用于为第三方应用提供有限的访问权限。它基于令牌(Token)机制,允许用户在不向第三方应用提供自己的用户名和密码的情况下,授权第三方应用访问其受保护的资源。整个流程涉及四个角色:资源所有者(通常是用户)、客户端(第三方应用)、授权服务器和资源服务器。主要流程包括用户授权、客户端获取访问令牌、客户端使用令牌访问资源。API Key 是一种简单的鉴权方式,通常是一个由字母、数字组成的字符串。

2301_78671173的博客 1191

.net core mvc登录验证

本文仅仅是能够告诉读者怎么用,什么效果,不包含原理讲解。 在java学习中,登录往往是通过cookie,session,过滤器这样的模式完成的,.net core中登录模块完成了非常好的封装,来提供登录校验的这种能力,但是封装太好往往会看不懂,做不出来,本篇文章不讨论内部细节,以一个项目的模式来看看在Visual Studio中如何去使用这个写好的框架。 打开visual studio开始项目...

h1311454244的博客 3530

避坑指南:中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案

本文详细解析了中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案,包括数据清洗、特征值解码、时间序列处理和质量控制等关键步骤。通过Python实战代码示例,帮助研究者高效处理这一包含全国699个气象站多要素日值数据的数据集,避免常见陷阱,提升气候变化研究和农业气象分析的准确性。

xray4的博客 1025

ASP.NET CORE MVC 认证和授权(最简入门)

代码中,User.Identity.IsAuthenticated 作用就是判断是否登录认证过。登录后,显示“Logout”,点击后退出登录,并重定位到Index页面(控制器中体现)我前端页面采用了_Layout 布局,在布局的右上角有一个登录按钮,如果仅仅是登录后才可视,不分角色权限的话,控制器权限属性可以简单为。登录页面,一个空参数,用HttpGet ,保证登录页面可加载。未登录时,显示“Login”,点击后进入登录页面。另外,再创建一个控制器,用于取消登录。--以上,即完成了认证。

钅隼戋 ‘s Bolg 1274

从理论到实践:用CST微波工作室完成单站雷达RCS仿真的完整指南

本文提供了一份利用CST微波工作室进行单站雷达RCS仿真的完整实践指南。文章深入剖析了从求解器选择(重点推荐积分方程法)、模型与材料设置、平面波激励定义到后处理分析的完整逻辑链条,旨在帮助工程师不仅完成仿真,更能理解其背后的物理原理与工程考量,从而高效、精准地评估目标的电磁散射特性。

weixin_29256771的博客 179

Mission Planner连接Autopilot保姆级教程:从USB到无线全搞定

本文提供Mission Planner连接Autopilot的全面指南,涵盖USB直连、无线数传、蓝牙适配等多种连接方案。详细讲解驱动安装、波特率匹配、性能优化等关键步骤,并分享多链路冗余配置与故障转移的高阶技巧,助你快速解决连接问题。

weixin_28455801的博客 376

Asp.net core MVC 6.0 用户登录 Cookie 认证

Asp.net mvc core 6.0 用户登录 Cookie 认证 详细步骤 一学就会 超级简单 Asp.net mvc core 6.0 用户登录 Cookie 认证 详细步骤 一学就会 超级简单 Asp.net mvc core 6.0 用户登录 Cookie 认证 详细步骤 一学就会 超级简单

精通电脑科技的博客 2842

专栏丨华为HN8145XR光猫获取超级管理员密码

摘要:本文详细介绍了华为HN8145xr光猫获取超级管理员权限的完整步骤。首先通过ONT使能工具补全shell,然后利用Telnet登录光猫后台进行操作。文章提供了多种获取超级密码的方法,包括配置文件解密、一键查询工具等,并针对联通光猫特别说明了默认密码格式(CUAdmin+后八位数字)。此外,还介绍了恢复出厂设置、修改SSID等实用操作,帮助用户完全掌控光猫设备。文末附有详细的命令行操作指南,适合有一定技术基础的用户参考。

8241

.net MVC下鉴权认证(二)

.net core的鉴权认证

飞翔的学习笔记 881

AICodeing:AI驱动的全栈开发革命

作为阿里/字节跳动的资深Java工程师,我们正站在研发效能革命的临界点上。本文将深入探讨如何利用AI技术重构全栈开发流程,实现从需求到上线的量子级提速。

weixin_43290370的博客 1134

手把手教你用ESP32-C3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-C3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5527

Asp.net core MVC + HMAC 实现API请求认证,用户认证与授权,Web Token认证

对于需要管理员权限的操作,客户端需要在请求头中包含有效的 HMAC 签名。客户端在登录时获取 JWT token,并在后续的 API 请求中携带 token。对于需要管理员权限的操作,客户端需要在请求头中包含有效的 HMAC 签名。这个前端示例与之前的后端示例相呼应,演示了如何在 Angular 应用程序中实现 HMAC 认证和 JWT 认证,以及基于角色的授权。该示例涵盖了 API 安全的核心要素,可以作为一个良好的起点,根据具体需求进行进一步扩展和定制。

极客神殿 582

构建高效的LLM应用测试框架

《构建高效的LLM应用测试框架》 关键词:LLM,测试框架,应用测试,效率优化,测试原理 摘要:本文将深入探讨构建高效LLM应用测试框架的必要性、方法与步骤,旨在为开发者提供一套系统化、可操作的测试解决方案,从而提升LLM

AI天才研究院 1044

揭秘ASP.NET Core 8身份认证机制:如何实现安全可靠的JWT鉴权方案

掌握ASP.NET Core 8 Web API开发实战精髓,深入解析JWT身份认证机制。涵盖Token生成、验证流程与安全策略配置,适用于前后端分离与微服务场景,实现高效可靠的用户鉴权方案,值得收藏。

FastProceed的博客 913

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

asp.net core集成JWT的步骤记录

【什么是JWT】 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。 JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。 JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 【什么时候应该使用JSON Web令牌?】 授权:这是使用JWT的最常见方案。一旦用户登录,每个后续请

极客神殿 666

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

.NET中JWT认证与授权机制深度解析

JWT(JSON Web Token)作为现代API安全的核心技术,通过Base64Url编码的头部、载荷和签名实现无状态认证。其核心原理是利用数字签名验证Token完整性,相比传统Session机制更适合微服务架构。在.NET生态中,结合C#的强类型特性,开发者可以通过Microsoft.AspNetCore.Authentication.JwtBearer包快速实现安全认证。JWT的技术价值在于简化分布式系统身份验证流程,同时支持基于声明的细粒度授权控制。典型应用场景包括跨域单点登录(SSO)、微服务间

weixin_34160277的博客 421

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ASP.NET Core WebAPI中使用JWT Bearer认证和授权

为什么是 JWT BearerASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cooki...

dotNET跨平台 1万+

NET(C#):中的基于哈希算法的消息认证码(HMAC)

基于哈希算法的消息认证码(HMAC:Hash-based Message Authentication Code )在.NET也可以很轻松地实现。   在目前的.NET Framework中(.NET 4.0)HMAC位于如下位置: HMAC继承与HashAlgorithm,后者代表抽象的哈希(散列)算法,而他的直接父类:KeyedHashAlgorithm代表有密钥的哈

cjmmya的专栏 2561

.net core mvc用户身份验证

主要实现Cookie过期后自动跳转登录页 public class UserAuthorization : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { var description = (Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescrip

陈熙之的博客 562

【ASP.NET Core 基础知识】--身份验证和授权--用户认证的基本概念

用户认证是一个验证用户身份的过程,以确保用户是他们声称的那个用户。这通常涉及到用户提供用户名和密码,或者其他的身份验证信息,以证明他们有权访问特定的系统、服务或信息。用户认证是网络安全的重要组成部分,它可以防止未经授权的访问,保护用户的个人信息和企业的敏感数据。ASP.NET CORE 中的身份验证系统是一个强大的安全框架,它可以帮助开发人员保护他们的应用程序和用户数据。它提供了一种机制,用于验证用户的身份,并授权用户访问特定的资源或服务。

喵叔 2357

.net mvc 身份验证_ASP.NET Core 身份验证及鉴权

(给DotNet加星标,提升.Net技能)转自:Antcnblogs.com/wiseant/p/10515842.html环境VS 2017ASP.NET Core 2.2目标以相对简单优雅的方式实现用户身份验证和鉴权,解决以下两个问题:无状态的身份验证服务,使用请求头附加访问令牌,几乎适用于手机、网页、桌面应用等所有客户端基于功能点的权限访问控制,可以将任意功能点权限集合授予用户或角...

weixin_39542340的博客 1678

.NET 6 中哈希算法的简化用法

介绍 微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法(MD5/SHA1/SHA256/SHA384/SHA512) 微软的叫法叫做HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key,通过 key 提升了安全性,能够有效避免密码泄露被彩虹表反推出真实密码, JWT(Json Web Token) 除了可以使用 RSA 方式外也支持使用 HMAC 。 New API 新增的 API 定义如下: namespaceSy..

秉持Love and share的态度去学习和生活 1274

hmac api_使用hmac进行安全的应用程序API通讯

hmac apiNowadays with the huge popularity of apps, more and more of us are using apps that handle sensitive private financial data, like mobile banking and trading digital assets. 如今,随着应用程序的广泛普及,我们中越来...

weixin_26727575的博客 542
上一篇: Asp.net core MVC + HMAC 实现API请求认证,用户认证与授权,Web Token认证
下一篇: 多构造器参数使用build设计模式
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值