各位程序员你好,我正在创建一个带有身份验证的 API。在OnTokenValidated函数上,我想让我的控制器实例将声明保存在API Base Controller 中。上下文变量是 aTokenValidatedContext并且有一个HttpContext属性,但是这个 HttpContext 没有常用的方法(我只会用它的常用方法获取 RouteData )。我知道有很多方法可以轻松访问任何控制器的声明,但由于原因,我需要在 ApiBaseController 中使用它。我的代码在启动时是这样的: options.JwtBearerEvents = new JwtBearerEvents { OnAuthenticationFailed = context => { return jwtMiddleware.AuthenticationFailed(context); } ,OnMessageReceived = context => { return jwtMiddleware.MessageReceived(context); }, OnTokenValidated = context => { //var claims = context.Principal.Claims.ToList(); return jwtMiddleware.TokenValidated(context); }, OnChallenge = context => { return jwtMiddleware.Challenge(context); } };也许我可以在另一个回调函数中保存声明?我到处寻找类似的情况,但我还没有找到任何东西。您对此有什么建议吗?帮助。提前致谢。
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
就像@win 在他的评论中所说的那样,这些声明在Principal
. 所以你应该像正常人一样使用它。
另一方面,I必须在基本控制器上保存相同的声明。所以我做了以下事情:
添加了
IHttpContextAccessor
.创建了一个模型,其中包含我将保存的索赔信息。
我创建了一个方法,它调用单例上下文及其声明并返回带有信息的模型。
在基本控制器中,如果模型的实例为空,我将使用前面提到的方法分配它。
我不推荐这最后一个程序,只是使用Princpal
但可以帮助具有类似目标的其他人。
- 1 回答
- 0 关注
- 296 浏览
添加回答
举报
0/150
提交
取消