|
|
1
80
被接受的答案对我来说并不适用。我不确定这是不是因为我使用了。NET Core 2.0或其他版本,但它看起来像是框架将主题声明映射到了NameIdentifier声明。因此,以下几点对我很有用:
注意,这假设了主题
默认情况下,中的JWT身份验证处理程序。NET将JWT访问令牌的子声明映射到
|
|
|
2
44
就我而言,我将电子邮件作为一种独特的价值 |
|
|
3
43
似乎很多人都在关注这个问题,所以我想分享一些我之前问这个问题后学到的更多信息。 它让一些事情变得更清楚(至少对我来说),而且不那么明显(对我这个.NET新手来说)。 像 评论中提到:
这绝对正确。 因为这一切都是一样的。NET和。净核心。
System.Security.Claims
名称空间及其索赔实体、索赔原则和索赔。属性。因此在这两种情况下都使用。NET Core控制器类型(API和MVC或Razor或…)并且可以通过
重要的一点是,所有教程都没有讲出来。 ClaimsIdentity , ClaimsPrinciple Claim.Properties . 都是这样。现在你知道了。这是由 海瑞歌
全部
基于声明的认证中间件(如果正确实现)将填充
使用小型自定义扩展方法,您现在可以像这样获取当前用户id(主题声明更准确)
或者你在回答 但是等等 :有一件奇怪的事 Honza Kalfus公司 在他的回答中做不到。
因为微软“有时”有些不同。或者至少他们做了更多(意想不到的)事情。例如,原始问题中提到的官方Microsoft JWT承载身份验证中间件。 微软决定在其所有官方认证中间件中转换声明(声明的名称)(出于兼容性原因,我不知道更多细节)。 您将找不到“sub”声明(尽管它是由OpenID Connect指定的单个声明)。因为它被转换成了 these fancy ClaimTypes 要么坚持使用Microsoft命名(并且在添加/使用非Microsoft中间件时必须注意),要么了解如何为Microsoft中间件转换声明映射。 对于JwtBearerAuthentication,它已完成(在启动早期或至少在添加中间件之前完成):
如果您想坚持使用Microsoft namings主题声明(不要打败我,我现在不确定名称是否是正确的映射):
FindFirst 方法虽然我的代码示例显示了这一点,但如果没有这些示例,您可能应该使用它们。
但我的代币呢?
我不知道是否有其他中间件,但JWT承载身份验证允许为每个请求保存令牌。但这需要激活(在
这种方法有一个较旧的版本(这在.NETCore2.2中适用,没有不推荐的警告)。 如果需要从这个字符串中解析和提取值,可能会有问题 How to decode JWT token 有帮助。 嗯,我希望这个总结也能帮助你。 |
|
|
4
27
如果您使用
|
|
|
5
7
您可以使用。
|
|
|
6
6
我使用了HttpContext,它运行良好:
|
|
|
7
5
在我的例子中,我设置了索赔类型。生成JWT令牌之前将名称命名为唯一用户电子邮件:
然后,我将唯一的用户id存储到ClaimTypes。名称标识符:
然后在控制器代码中:
|
|
|
8
3
我在中使用了以下代码。net core 5 web api
|
|
|
9
1
asp。net core identity获取用户id
.net core identity获取用户id
|
|
|
Yuri Mckoy · 未处理的异常。系统。无效操作异常 1 年前 |