ASP.NET Core 自定义认证方式--请求头认证

Intro

最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题。

本文主要介绍网关后面的服务如何进行认证。

解决思路

网关可以做一部分的认证和授权,服务内部有时候也会需要用户的信息,这时该怎么办呢,我们使用的是 JWT 认证,有一个 identity server去颁发,验证 token,一种简单方式可以把 token 直接往后传,传递给后面的具体某个服务,后面的服务可以去 identity server 拿到公钥信息去验证 token 的合法性,依然可以拿到用户的一些基本信息,但又觉得这样后面的服务还是要依赖 identityserver 不是太好,因为认证已经在网关做掉了,后面不应该再去做认证的事情了,而且解析 JWT token 也是有一定的性能损耗,于是想把用户的基本信息在网关认证完成之后放到请求头中。

我们网关用的Ocelot,开源的原生 .NET 项目方便自己扩展,Ocelot 中有一个 Claims2Headers 可以把 Claims 中的信息转换为请求头,详细使用参见文档,但是实现有个bug,如果有多个值他只会取第一个,详见issue,可以自己扩展一个 ocelot 的中间件替换掉原有的中间件。

把用户信息放到请求头中,后面的服务从请求头中就可以拿到用户的基本信息了,为了后面的服务不做过多的改动,我做了一个自定义的认证,从请求头中拿用户的基本信息进行认证,这样后面的服务还是可以直接使用 User.Identity.IsAuthenticated 和 User.Identity.Name 等,不需要做什么改动。于是就有了这一根据请求头认证的项目

实现效果

下载示例项目,在 TestWebApplication 目录下运行 dotnet run

在浏览器中访问 http://localhost:5000/api/values

640?wx_fmt=png

使用 postman 或 fiddler (或其它你喜欢的工具)带上 header 访问 http://localhost:5000/api/values

640?wx_fmt=png

使用方式

使用方式可以参考示例项目

使用自定义的 HeaderAuthentication 来替代之前的认证方式,默认配置了用户名,用户id以及用户角色,如果不能满足可以在 options 中的 AdditionalHeaderToClaims 中添加更多转换

640?wx_fmt=png

这样就可以了,你可以下载示例项目,快速体验,你可以直接添加下面几个请求头

UserId 用户id
UserName 用户名称
UserRoles 用户角色(多个角色以 , 分割,可以在 options 里自定义多个值的分隔符

直接访问需要授权才能访问的资源了

现在只是初步的设想与实现,并已经验证确实可行,代码还有一些业务逻辑比如 UserId 现在是必须的,可以根据自己需要自行修改,最近有点忙,找时间再修改重构一下再发布 nuget 包。如果有什么需求或问题,欢迎一起探讨。

源码

自定义认证源码

提供了 HeaderAuthetication 和 QueryAuthentication 两种实现,一种使用请求头信息认证,一种使用 QueryString 信息认证。

HeaderAuthetication 主要实现在 HeaderAuthenticationHandler

核心代码,重写 Authenticate 方法:

640?wx_fmt=png

640?wx_fmt=png

注意

请注意,如果使用这种方式,请确保你的服务不会被外界直接访问,请求只能从网关或者本地调试发起。需要保证安全性,不能直接暴露到公网,才能使用这种方式。

原文地址:https://www.cnblogs.com/weihanli/p/10464507.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


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

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

相关文章

2016ICPC沈阳站

2016ICPC沈阳站 题号题目知识点难度AThickest Burger贪心签到BRelative atomic mass贪心签到CRecursive sequence矩阵快速幂快铜DWinning an AuctionECounting Cliquesdfs剪枝稳铜快银FSimilar RotationsGDo not pour outHGuessing the Dice RollIThe ElderJQuery on a graphK…

P7516 [省选联考 2021 A/B 卷] 图函数

解析 纯纯的人类智慧题。 关键性质:vvv 可以在计算 f(u,G)f(u,G)f(u,G) 时产生贡献,当且仅当 GGG 中 u,vu,vu,v 之间可以通过 [v,n][v,n][v,n] 的点互相到达。 充分性较为显然,编号更大的点不会比 vvv 先删去,所以必然在 vvv 时…

开发语言大爆炸的时代,究竟谁主沉浮?

开发语言大爆炸的时代,究竟谁主沉浮?当这个系列本来打算是写人物的,而且是写我们身边那些优秀的开发者,然而当第一篇文章,写的是关于我们长沙.NET社区的优秀开发者邹琼俊,发表在博客园之后,有一…

2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)

牛牛和数组操作descriptionsolutioncodedescription 【题目描述】 有n 2个整数a0, a1, . . . , an, an1&#xff0c; a0 an1 0。你需要做确切地n次操作&#xff0c;每次 操作为以下形式&#xff1a; 选择一个整数x满足ax ≠ 0&#xff0c;使得ax 0&#xff0c;令lmaxi<…

杜教BM模板(用于求线性递推公式第N项)

通过手动求出线性递推公式的前几项&#xff08;一般要前8项&#xff09;&#xff0c;杜教BM模板可以直接求第n项是多少。。我才知道&#xff0c;离谱。。对于我来说是妙计 //递推公式黑科技 #include<bits/stdc.h> using namespace std; ///#define X first //#define Y…

Asp.NETCore轻松学系列阅读指引目录

前言耗时两个多月&#xff0c;坚持写这个入门系列文章&#xff0c;就是想给后来者更好更快的上手体验&#xff0c;这个系列可以说是从入门到进阶&#xff0c;适合没有 .NETCore 编程经验到小白同学&#xff0c;也适合从 .NET Framework 迁移到 .NETCore 的朋友。本系列从安装环…

P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)

解析 给出 n,x,pn,x,pn,x,p 和一个 mmm 次的多项式 f(k)f(k)f(k)&#xff0c;求解&#xff1a; ∑k0nf(k)xk(nk)modp\sum_{k0}^nf(k)x^k\binom n k\mod pk0∑n​f(k)xk(kn​)modp 把多项式拆成若干个单项式&#xff0c;现在就是要求&#xff1a; ∑k0nkpxk(nk)\sum_{k0}^nk^px…

CF750G New Year and Binary Tree Paths(数位dp二进制+数学)

CF750G New Year and Binary Tree Pathsdescriptionsolutioncodedescription 题目链接 一颗无穷个节点的完全二叉树。 求有多少条树上的简单路径编号和为 s。 s≤1e15s\le 1e15s≤1e15 solution 一条单链的情况 考虑从节点xxx开始走一条节点个数是hhh的链&#xff08;链长为…

eShopOnContainers 知多少[9]:Ocelot gateways

引言客户端与微服务的通信问题永远是一个绕不开的问题&#xff0c;对于小型微服务应用&#xff0c;客户端与微服务可以使用直连的方式进行通信&#xff0c;但对于对于大型的微服务应用我们将不得不面对以下问题&#xff1a;如何降低客户端到后台的请求数量&#xff0c;并减少与…

Acwing 1072. 树的最长路径

Acwing 1072. 树的最长路径 题意&#xff1a; 每个边有权值&#xff0c;求树的直径 题解&#xff1a; 两遍dfs可以求&#xff0c;这里用树形dp的方法&#xff0c;我们将1作为根节点来看这棵树 我们可以将点看作是钉子&#xff0c;边就是挂在钉子上的绳子&#xff0c;我们只…

模板:矩阵树定理

文章目录前言解析无向图有向图根向树叶向树code带权图code所谓矩阵树定理&#xff0c;就是用矩阵解决树问题的定理。 &#xff08;逃&#xff09; 前言 神奇科技。 之前一直没有写博客&#xff0c;觉得还是写一发比较好。 证明什么的是不可能会的 背下来背下来&#xff01; …

P2016 战略游戏

P2016 战略游戏 题意&#xff1a; 他要建立一个古城堡&#xff0c;城堡中的路形成一棵无根树。他要在这棵树的结点上放置最少数目的士兵&#xff0c;使得这些士兵能了望到所有的路。 注意&#xff0c;某个士兵在一个结点上时&#xff0c;与该结点相连的所有边将都可以被了望…

.NET/C# 获取一个正在运行的进程的命令行参数

在自己的进程内部&#xff0c;我们可以通过 Main 函数传入的参数&#xff0c;也可以通过 Environment.GetCommandLineArgs 来获取命令行参数。但是&#xff0c;可以通过什么方式来获取另一个运行着的程序的命令行参数呢&#xff1f;进程内部获取传入参数的方法&#xff0c;可以…

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界(并查集+第二分块)

CF896E Welcome home,Chtholly/[Ynoi2018]五彩斑斓的世界descriptionsolutioncodedescription 五彩斑斓的世界 CF896E Welcome home,Chtholly 五彩斑斓的世界是加强版&#xff0c;所以下面的题解部分是写的加强版 solution 第二分块 查询操作中把>x>x>x的数全都…

Defuse the Bombs Gym - 102822D

Defuse the Bombs Gym - 102822D 题目&#xff1a; 给你n个数&#xff0c;现在每轮会有三个操作&#xff1a; 1.选择一个数&#xff0c;使他加一 2.所有数减一 3.当有一个数变成负数时结束操作&#xff0c;否则回到第一步 问最多能进行几次第一步&#xff1f; 题解&#xff…

P4364 [九省联考 2018] IIIDX(线段树、贪心)

解析 感觉不至于黑的题。 然而我并不会做 did_idi​ 互不相同的时候直接无脑贪心即可&#xff0c;这样55分的好成绩就到手了。&#xff08;交完发现可以骗到60&#xff09; 滚榜级的良心分了属于是。 考虑有相同时如何做。 先把值降序排序&#xff0c;然后维护一棵线段树&…

CF1491H Yuezheng Ling and Dynamic Tree(分块)

CF1491H Yuezheng Ling and Dynamic Treedescriptionsolutioncodedescription 题目链接 solution 非常清新的小分块题了 前提&#xff1a;将序列分成n\sqrt{n}n​块&#xff0c;每块有n\sqrt{n}n​个数&#xff0c;记第iii个块的左右边界为Li,RiL_i,R_iLi​,Ri​&#xff0…

听说,霸都.NET技术社区准备搞线下聚会了?

.NET Core实战项目交流群日常交流嗨&#xff0c;你听说了没有&#xff1f;霸都.NET技术社区准备搞线下聚会了&#xff01;啥时候的事情啊&#xff1f;最近才知道的消息啊&#xff01;那你是从哪里知道的消息呢&#xff1f;.NET Core项目实战交流群&#xff08;637326624&#x…

Knowledge is Power Gym - 102822K

Knowledge is Power Gym - 102822K 题意&#xff1a; 给你一个数n&#xff0c;让你将n分解成一些互质的数&#xff0c;然后这些数的最大值减最小值要求最小&#xff0c;如果不行输出-1&#xff0c;否则输出最大值减最小值的最小情况 题解&#xff1a; 具体做法是通过枚举大…

P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)

解析 它还真的不难。 乐。 这题没做出来有些谔谔。 外层wqs二分显而易见&#xff0c;里面不知道为啥我总觉得这个题可以贪心。 然后一直试图在原树直径上下功夫&#xff0c;一筹莫展。 看到题解“dp”两个字这题也就做完了… 就相当于要把一棵树分成若干条无交链&#xff0c;每…