Dvorak
Dvorak

Dvorak Chen

All Posts in 2024.6


学学dotnet core中的身份验证和授权-2-cookie

本文介绍了在ASP.NET Core中使用Cookie实现身份验证和授权的完整流程。首先,通过自定义登录逻辑创建包含用户声明(如姓名和核酸状态)的Cookie,并配置身份验证中间件以处理请求中的Cookie。接着,定义了名为"Need24"的授权策略,该策略检查用户的声明是否满足特定条件(姓名为“张三”且核酸状态为24)。将此策略应用于登出接口,并确保授权中间件在身份验证之后使用。测试过程中,在未携带有效Cookie时,访问受保护接口会重定向到默认登录页面,导致404错误;而携带正确Cookie的请求则成功通过授权。本文还讨论了Cookie在实际应用中的局限性,特别是在跨域场景下的使用较少。--DeepSeek

.NET Authentication Authorization ASP.NET Core Cookie authentication Claims based security

学学dotnet core中的身份验证和授权-1-概念

身份验证和授权是DotNet Core开发中不可或缺的两个核心概念,本文通过形象的比喻和简单的逻辑,清晰地阐述了这两者之间的关系。文章将项目比作一栋大楼,接口比作房间,用户请求接口的行为则相当于进入某个房间的过程。在此过程中,身份验证就像门卫,负责确认用户的合法身份;而授权则是进一步检查用户是否具备进入特定房间的权限。 在具体实现中,声明(Claim)起到了关键作用。它不仅是连接身份验证和授权的桥梁,还承载了用户的身份信息和权限数据。通过服务器下发凭证并由客户端携带的方式,系统能够高效地完成身份验证和权限校验。文章以核酸检测为例,生动地展示了基于声明的授权机制如何运作:只有在声明中找到符合条件的条目时,才能获得访问许可。 本文还提到,在后续内容中将使用Cookie来实现一个简单的身份验证和授权示例。这为读者提供了进一步探索的方向。通过这种方式,开发者可以灵活地根据实际需求设计权限控制逻辑,并自定义拒绝访问后的处理方式,如重定向到登录页面或引导用户完成特定操作。 总体来看,本文不仅解释了身份验证和授权的基本原理,还通过具体的例子展示了它们在实际开发中的应用场景。那么,你是否对如何高效实现声明的发放与验证有了初步的思考呢?下文中将揭晓答案。--DeepSeek

.NET Authentication Authorization ASP.NET Core Claims .NET Core

Rust - bytecodec 编解码库

文章介绍如何使用 Rust 的 bytecodec 库为自定义结构体 Peer 实现编码和解码功能。在无法直接为第三方类型实现 Encoder 的情况下,作者通过包装这些类型并借助 bytecodec 提供的 Encoder 实现(如 Utf8Encoder、I8Encoder 等),成功实现了对 Peer 结构体的成员(包括 email、nat_type 和 pub_addr)的编码逻辑。 具体来说,作者定义了三个编码器:NatTypeEncoder、PubAddrEncoder 和 PeerEncoding。其中,PeerEncoding 包含了上述两个编码器以及 Utf8Encoder 用于处理 email 成员。在实现 start_encoding 方法时,依次调用各成员编码器的 start_encoding 方法;在 encode 方法中,则通过 bytecodec_try_encode! 宏和自定义的 put_newline! 宏,将各成员编码结果按顺序写入缓冲区,并在其间添加换行符分隔。最后,is_idle 方法判断所有成员编码器是否完成编码,以决定整体编码状态。 文章还提到,解码部分的实现与编码过程类似,需要定义对应的 Decoding 结构体并实现 Decoder trait 的相关方法。--DeepSeek

Rust bytecodec serialization custom encoder codec struct

Rust 小技巧之临时作用域

这篇文章探讨了在 Rust 编程中处理 `Result` 和 `Option` 时的常见困扰,并介绍了通过使用临时作用域来简化代码的技巧。文章以读取用户输入为例,展示了如何优化繁琐的操作,避免不必要的变量声明和函数抽象。通过创建一个临时作用域,可以在作用域内集中处理所需操作,同时确保资源在作用域结束后自动释放,使代码更加简洁和易于理解。这种方法特别适合处理少量繁琐的操作,能够显著提升代码的可读性和维护性。文章最后提出了一个问题:你是否也在面对类似的繁琐操作?试着思考一下如何在你的项目中应用这种技巧来简化代码吧!--DeepSeek

Rust Result and Option Code Optimization Rust Patterns Input Output Handling Functional Programming

P2P 的 NAT

NAT(网络地址转换)是为了缓解IPv4地址不足而提出的协议,它通过允许多个设备共享一个公共IP地址解决了地址短缺问题,但也对网络结构和通信方式产生了深远影响。文章详细介绍了NAT的原理及其类型,包括受限锥型、端口受限锥型和对称型等,并探讨了这些不同类型的NAT在P2P(点对点)通信中的表现和挑战。由于NAT改变了原本IP协议的设计,使得网络变得更加复杂和脆弱,尤其是在建立P2P连接时需要处理复杂的映射和连接流程。文章指出,在某些情况下,如端口受限锥型与对称型之间的通信或对称型与对称型之间的通信,完全无法建立有效的P2P连接。NAT的普及不仅未能彻底解决IPv4地址不足的问题,反而延缓了IPv6的推广,其缺点远超过优点,被认为是一个失败的协议设计。--DeepSeek

network NAT P2P Communications IPv4 Exhaustion Network Architecture Internet Protocol