尝试在 .net 核心中授权 ClaimsIdentity
Posted
技术标签:
【中文标题】尝试在 .net 核心中授权 ClaimsIdentity【英文标题】:Trying to Authorize a ClaimsIdentity in .net core 【发布时间】:2017-06-26 15:19:11 【问题描述】:我在我的控制器中添加了一些代码来授权所有用户:
[Authorize]
[Route("/api/companyIdentifier/My")]
public class MyController : ControllerBase
在一个自定义中间件应用程序中,我添加了以下基于 jwt 声明的逻辑。
var validateTokenResult =handler.ValidateToken(tokenString, parameters,out outvariable);
if (validateTokenResult.Identity != null)
var identity = new ClaimsIdentity(validateTokenResult.Claims)
Label = "Middleware Bearer Auth"
;
context.User.AddIdentity(identity);
我仍然收到 401 Unauthorized。调试时我可以看到添加身份后有2个身份。一个没有声明,第二个有多个声明并设置为 isAuthenticated:true。知道这里会发生什么。我猜不应该添加第一个身份。
【问题讨论】:
【参考方案1】:我在日志中发现了一些奇怪的东西:
2017-02-08 15:35:23.9356 用户授权成功: (空)。
我没有将身份添加到当前的 httpcontext.user,而是将用户替换为由令牌验证创建的新用户:
context.User = validateTokenResult;
这解决了我的问题。
【讨论】:
以上是关于尝试在 .net 核心中授权 ClaimsIdentity的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自定义策略模式实现 jwt 令牌基础身份验证以在 .net 核心中进行授权?
如何在 ASP .Net 核心的 Swagger 中添加基本授权标头
在 ASP.NET 核心应用中本地模拟 Azure 应用服务授权