繁体   English   中英

在中间件 .net core 2.0 中获取访问令牌

[英]Get access token in middleware .net core 2.0

在 .net 核心中的一个身份验证过程之后,我试图在我的中间件类中获取 access_token。

我正在使用此代码在我的控制器中获取我的令牌

var accessToken = await HttpContext.GetTokenAsync("access_token");

但是,当我想在身份验证部分之后调用的中间件上获取它时,HttpContext 不存在方法GetTokenAsync

我的中间件类是这个

public class Session
    {
        private readonly RequestDelegate _next;
        public Session(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext httpContext)
        {
            var accessToken = // here I want to get my token

            await _next(httpContext);
        }
    }

我尝试了不同的方法,我一直在寻找答案,但我仍然没有解决方案。

我认为中间件和控制器中的 HttpContext 类是不同的,但我不知道如何在中间件中解决这个问题。

有人知道如何在中间件调用中访问令牌,或者甚至可能吗?

我的启动电话是这些,也许它也很有用。

app.UseAuthentication();
app.UseHttpsRedirection();
app.UseMiddleware<Session>();
app.UseMvc();

添加using Microsoft.AspNetCore.Authentication; 到您的中间件文件。 这是带有GetTokenAsync方法的AuthenticationTokenExtensions的命名空间。

如果access token不在HttpContext并且GetTokenAsync返回空,您也可以直接使用 HTTP 标头:

    public async Task Invoke(HttpContext context)
    {
        // code dealing with the request
        var result = await context.GetTokenAsync("access_token") ?? context.Request.Headers["Authorization"];

        await _next(context);
        // code dealing with the response
    }

另请注意, GetTokenAsync会给你令牌,而context.Request.Headers["Authorization"]会给你“bearer sdfosidfds99wn20j293n...”。 你需要像这样解析标题

result.Substring(7); // size of bearer + whitespace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM