0

0

Blazor 怎么给 HTTP 请求添加认证头

星降

星降

发布时间:2025-12-13 16:36:40

|

932人浏览过

|

来源于php中文网

原创

Blazor中HTTP认证头配置核心是按场景选择方式:WASM推荐用DelegatingHandler动态注入Bearer Token,Server端通常无需前端加头。

blazor 怎么给 http 请求添加认证头

在 Blazor 中给 HTTP 请求添加认证头,核心是配置 HttpClient 实例,使其自动携带如 Authorization: Bearer xxx 这样的请求头。具体方式取决于你用的是 Blazor WebAssembly(WASM)还是 Blazor Server,但主流和推荐做法集中在 WASM 场景——因为 Server 端通常走服务端身份验证(如 Cookie 或 JWT 在服务端验证),前端无需手动加头。

Blazor WebAssembly:用自定义 DelegatingHandler 注入认证头

这是最灵活、推荐的方式,尤其适合使用 JWT 的场景。你创建一个继承自 DelegatingHandler 的类,在 SendAsync 中读取当前用户 Token 并添加到请求头中。

  • 先确保已通过 AuthenticationStateProvider 获取登录状态和 Token(比如从本地存储或 IdentityServer 登录后缓存)
  • 新建一个 AuthHeaderHandler.cs
public class AuthHeaderHandler : DelegatingHandler
{
    private readonly NavigationManager _navigation;
    private readonly IJSRuntime _jsRuntime;

    public AuthHeaderHandler(NavigationManager navigation, IJSRuntime jsRuntime)
    {
        _navigation = navigation;
        _jsRuntime = jsRuntime;
    }

    protected override async Task SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var token = await _jsRuntime.InvokeAsync("localStorage.getItem", "authToken");
        if (!string.IsNullOrWhiteSpace(token))
        {
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
        }

        return await base.SendAsync(request, cancellationToken);
    }
}
  • Program.cs(或 Startup.cs)中注册该 handler,并配置命名的 HttpClient
builder.Services.AddTransient();
builder.Services.AddHttpClient("AuthenticatedClient", client =>
{
    client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
})
.ConfigurePrimaryHttpMessageHandler(() => new AuthHeaderHandler(
    builder.Services.GetRequiredService(),
    builder.Services.GetRequiredService()));
  • 在组件中注入并使用:
@inject IHttpClientFactory HttpClientFactory

@code {
    private async Task LoadData()
    {
        var client = HttpClientFactory.CreateClient("AuthenticatedClient");
        var response = await client.GetAsync("api/values");
        // ...
    }
}

Blazor WebAssembly:直接设置 HttpClient.DefaultRequestHeaders(简单但不推荐)

适用于 Token 固定、且整个应用生命周期内不会变更的极简场景(比如测试用)。它会污染全局默认头,不适合多用户或 Token 动态刷新的场景。

  • Program.cs 初始化时设置:
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue("Bearer", "your-jwt-token-here");
  • 然后注册为单例:
builder.Services.AddSingleton(sp => httpClient);

注意:这种方式无法动态更新 Token,也不支持异步获取(比如从 JS 或 AuthState 获取),仅作快速验证用。

配合 AuthenticationStateProvider 动态刷新 Token

真实项目中 Token 可能过期或需要刷新。你需要让 AuthHeaderHandler 能响应认证状态变化。

Toolplay
Toolplay

一站式AI应用聚合生成平台

下载
  • AuthHeaderHandler 中注入 AuthenticationStateProvider
  • 调用 GetAuthenticationStateAsync() 获取当前用户,并从中提取 Token(例如从 User.FindFirst("token")?.Value
  • 如果使用 Microsoft.AspNetCore.Components.WebAssembly.Authentication 包(如 RemoteAuthenticationState),Token 通常已封装在 user.Identity 或自定义声明中

这样每次发请求前都会拉取最新认证状态,天然支持登录/登出/Token 刷新后的自动同步。

Blazor Server:一般不需要前端加认证头

Blazor Server 是服务端渲染,HTTP 请求由服务器发出(比如用 HttpClient后端 API),此时认证通常靠服务端 Cookie 或服务间 Token,前端组件本身不发跨域请求。若需调用外部 API,应在服务端完成认证(如用 IHttpClientFactory + AddHttpMessageHandler),而非在 Razor 组件里操作请求头。

如果你在 Blazor Server 中用了 JSInterop 发起浏览器原生 fetch,则可按 JS 方式加头(如 headers: { 'Authorization': 'Bearer ...' }),但这属于前端 JS 行为,不属于 Blazor 的 .NET HTTP 生态。

基本上就这些。关键是选对模式:WASM 推荐 DelegatingHandler + AuthenticationStateProvider;Server 场景尽量避免前端发带认证的请求;所有 Token 存储与读取都要注意安全性(避免 XSS 泄露 localStorage)。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6427

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

347

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6169

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

817

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1066

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1354

2024.03.01

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.6万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号