前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 Azure Application Insights 中记录用户身份信息

在 Azure Application Insights 中记录用户身份信息

作者头像
Edi Wang
发布于 2021-08-23 08:16:37
发布于 2021-08-23 08:16:37
1.1K0
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

导语

Azure Application Insights 是一个非常强大的 APM 工具,用于监视 Web 应用程序。但是,并非我们需要的所有功能都是开箱即用的。例如,为了记录请求和响应正文,我们必须写一个自定义 ASP.NET Core 中间件,就像这篇文章说的那样。

我现在有一个使用 JWT 身份验证的 ASP.NET Core Web API 应用程序。当请求失败时,我想记录用户的身份以便调试。让我们看看如何操作吧~

https://www.azureblue.io/how-to-log-http-request-body-with-asp-net-core-application-insights/

扩展原版 Middleware

我需要修改来自 https://www.azureblue.io/how-to-log-http-request-body-with-asp-net-core-application-insights 的 ASP.NET Core Middleware。

原始代码将请求正文作为自定义属性(Custom Property)记录到 Azure Application Insights。

public class RequestBodyLoggingMiddleware : IMiddleware

{

public async Task InvokeAsync(HttpContext context, RequestDelegate next)

{

var method = context.Request.Method;

context.Request.EnableBuffering();

if (context.Request.Body.CanRead && (method == HttpMethods.Post || method == HttpMethods.Put))

{

using var reader = new StreamReader(

context.Request.Body,

Encoding.UTF8,

detectEncodingFromByteOrderMarks: false,

bufferSize: 512, leaveOpen: true);

var requestBody = await reader.ReadToEndAsync();

context.Request.Body.Position = 0;

var requestTelemetry = context.Features.Get<RequestTelemetry>();

requestTelemetry?.Properties.Add("RequestBody", requestBody);

}

await next(context);

}

}

我的 JWT 身份验证将用户属性添加到Claim中。

var claims = new List<Claim>

{

new("UserId", user.Id.ToString()),

new(ClaimTypes.Name, user.DisplayName),

new(ClaimTypes.Email, request.Email),

new(ClaimTypes.AuthenticationMethod, "Password"),

new("LastLoginTimeUtc", user.LastLoginTimeUtc.ToString())

};

这些Claim 可以从 HttpContext.User 属性获取。

因此,将用户信息记录到 Application Insights 中非常简单,只需从 Claims 中获取值并将它们序列化为 JSON

if (context.User.Identity is { IsAuthenticated: true })

{

var userId = Guid.Parse(context.User.FindFirst(p => p.Type == "UserId")?.Value ?? string.Empty);

var userName = context.User.Identity?.Name;

var email = context.User.FindFirst(p => p.Type == ClaimTypes.Email)?.Value;

requestTelemetry?.Properties.Add("MpsUser", JsonSerializer.Serialize(new

{

userId,

userName,

email

}, MpsJsonSerializerOptions.Default));

}

最终的代码看起来像这样

public async Task InvokeAsync(HttpContext context, RequestDelegate next)

{

var method = context.Request.Method;

context.Request.EnableBuffering();

if (context.Request.Body.CanRead && (method == HttpMethods.Post || method == HttpMethods.Put))

{

using var reader = new StreamReader(

context.Request.Body,

Encoding.UTF8,

detectEncodingFromByteOrderMarks: false,

bufferSize: 512, leaveOpen: true);

var requestBody = await reader.ReadToEndAsync();

context.Request.Body.Position = 0;

var requestTelemetry = context.Features.Get<RequestTelemetry>();

requestTelemetry?.Properties.Add("RequestBody", requestBody);

if (context.User.Identity is { IsAuthenticated: true })

{

var userId = Guid.Parse(context.User.FindFirst(p => p.Type == "UserId")?.Value ?? string.Empty);

var userName = context.User.Identity?.Name;

var email = context.User.FindFirst(p => p.Type == ClaimTypes.Email)?.Value;

requestTelemetry?.Properties.Add("MpsUser", JsonSerializer.Serialize(new

{

userId,

userName,

email

}, MpsJsonSerializerOptions.Default));

}

}

await next(context);

}

还有一个地方我们需要注意。因为中间件需要获取用户信息,所以必须放在认证授权中间件之后。

app.UseAuthentication();

app.UseAuthorization();

app.UseRequestBodyLogging();

app.UseResponseBodyLogging();

有了这些,我们现在可以看到用户身份被记录到 Azure Application Insights 上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
System Generator学习——将代码导入System Generator
本节讲解如何讲讲代码(Matlab、HDL、C/C++)导入到 System Generator 并使用。
Gnep@97
2023/10/05
6840
System Generator学习——将代码导入System Generator
System Generator系列之使用MCode进行建模控制
老样子,先打开System Generator,启动MATLAB完成后,再打开Simulink进行仿真模型的设计,再添加以下的一些基本模块:
狂人V
2020/06/29
9790
System Generator从入门到放弃(五)-Black Box调用HDL代码
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/29
2.1K0
Matlab Simulink支持system generator插件
目前有在 Simulink 中开发完成后将其转换成 Verilog 语言并将其跑在 fpga 上面的需求,因此本文简要介绍了在 matlab 的 simulink 中使用 system generator 的方法。
Gnep@97
2023/09/17
6030
Matlab Simulink支持system generator插件
System Generator从入门到放弃(三)-Digital Filter
  Simulink中的仿真模型为连续时间系统,数据格式多种多样;而FPGA中为离散时间系统,数据必须用一定的位数进行量化。两者之间必须要进行从连续到离散的转换、数据格式的转换,否则无法进行正确的FPGA设计。Xilinx Blockset中提供了相应的解决方案。
碎碎思
2020/06/30
1.9K0
System Generator从入门到放弃(三)-Digital Filter
System Generator从入门到放弃(一)-安装与使用
  System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/30
2K0
System Generator从入门到放弃(一)-安装与使用
Vivado与matlab系统开发设计 system generator(1)入门与安装
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
3.5K0
Vivado与matlab系统开发设计 system generator(1)入门与安装
System Generator从入门到放弃(二)-Digital Filter
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/30
2.2K0
System Generator从入门到放弃(二)-Digital Filter
System Generator从入门到放弃(七)-不同溢出与量化方式的对比
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/29
1.1K0
初识System Generator(安装+使用)
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,嵌入了Xilinx的一些模块,可以在MATLAB中的Simulink中进行定点仿真,可以设置定点信号的类型等操作,不过我更看重的是那个可以直接生成HDL文件,然后用于设计Xilinx的FPGA,ISE可以调用,VIVADO也可以调用,不过现在应该搞得比较多的是VIVADO,所以就直接按VIVADO的来玩这个System Generator。
狂人V
2020/06/29
4.1K1
System Generator从入门到放弃(六)-利用Vivado HLS block实现VivadoHLS调用C/C++代码
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/29
1.2K0
System Generator从入门到放弃(八)-使用多时钟域实现多速率系统设计
System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,可以在ISE或Vivado中进行调用。或者直接生成比特流下载文件。能够加快DSP系统的开发进度。
碎碎思
2020/06/29
1.5K0
System Generator初体验FIR滤波器
有关 System Generator 的安装以及简介可以参考我之前的博客 Matlab Simulink支持system generator插件,本文将初体验 System Generator,以达到如下目的:
Gnep@97
2023/10/05
4430
System Generator初体验FIR滤波器
基于System Generator的浮点数与定点数设计(实现与分析)
打开System Generator,然后将第一次设计的滤波器文件Copy一份然后进行一些更改,或直接新建模型,以可以参考前几篇文章
狂人V
2020/06/29
8440
IC技术圈期刊 2021年第4期
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。“煮酒言欢”进入IC技术圈,这里有近50个IC技术公众号。
FPGA技术江湖
2021/05/14
8110
IC技术圈期刊 2021年第4期
FPGA/数字IC笔试题——序列检测(FSM状态机)【状态机序列检测】
FSM有限状态机,序列产生,序列检测,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见。
FPGA探索者
2021/04/29
2.7K0
FPGA/数字IC笔试题——序列检测(FSM状态机)【状态机序列检测】
如何写好状态机(一)
今天给大侠带来如何写好状态机,状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以很多公司在硬件工程师及逻辑工程师面试中,状态机设计几乎是必选题目。本篇在引入状态机设计思想的基础上,重点讨论如何写好状态机。由于篇幅比较长,如何写好状态机分成三篇呈现。话不多说,上货。
FPGA技术江湖
2020/12/30
8980
万物皆可状态机
状态机是逻辑设计的重要内容,状态机的设计水平直接反应工程师的逻辑功底,所以很多公司在硬件工程师及逻辑工程师面试中,状态机设计几乎是必选题目。本篇在引入状态机设计思想的基础上,重点讨论如何写好状态机。由于篇幅比较长,如何写好状态机分成三篇呈现。话不多说,上货。
数字芯片社区
2020/07/24
1.3K0
万物皆可状态机
基于FPGA的有限状态机浅析
本文介绍了状态机在数字电路设计中的重要性,并通过一个简单的示例详细说明了状态机的实现过程。
NingHeChuan
2018/01/05
1.4K0
基于FPGA的有限状态机浅析
状态机设计举例
例 (试探法)汽车尾灯发出的信号主要是给后面行驶汽车的司机看的,通常汽车驾驶室有刹车开关(HAZ)、左转弯开关(LEFT)和右转弯开关(RIGHT),司机通过操作这3个开关给出车辆的行驶状态。假设在汽车尾部左、右两侧各有3个指示灯,分别用LA、LB、LC、RA、RB、RC表示,如图所示。这些灯的亮、灭规律如下:
timerring
2023/02/13
8920
状态机设计举例
推荐阅读
相关推荐
System Generator学习——将代码导入System Generator
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档