从 TokenValidatedContext 获取控制器实例

各位程序员你好,我正在创建一个带有身份验证的 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);

                    }

                };

也许我可以在另一个回调函数中保存声明?我到处寻找类似的情况,但我还没有找到任何东西。您对此有什么建议吗?帮助。提前致谢。


白板的微信
浏览 297回答 1
1回答

幕布斯6054654

就像@win 在他的评论中所说的那样,这些声明在Principal. 所以你应该像正常人一样使用它。另一方面,I必须在基本控制器上保存相同的声明。所以我做了以下事情:添加了IHttpContextAccessor.创建了一个模型,其中包含我将保存的索赔信息。我创建了一个方法,它调用单例上下文及其声明并返回带有信息的模型。在基本控制器中,如果模型的实例为空,我将使用前面提到的方法分配它。我不推荐这最后一个程序,只是使用Princpal但可以帮助具有类似目标的其他人。
打开App,查看更多内容
随时随地看视频慕课网APP