为了账号安全,请及时绑定邮箱和手机立即绑定

从 TokenValidatedContext 获取控制器实例

从 TokenValidatedContext 获取控制器实例

C#
白板的微信 2021-08-22 15:18:14
各位程序员你好,我正在创建一个带有身份验证的 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但可以帮助具有类似目标的其他人。


查看完整回答
反对 回复 2021-08-22
  • 1 回答
  • 0 关注
  • 296 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信