簡體   English   中英

在 ASP.net Web API 中發生授權之前嘗試使用 OWIN 注入授權標頭

[英]Trying to inject Authorization header using OWIN before authorization happens in ASP.net Web API

我正在使用 Owin 進行 JWT 身份驗證。 我所有的請求都以“401 未經授權”的形式返回。

我正在嘗試攔截對我的 Web 應用程序的所有請求,以便我可以從 cookie 中檢索 JWT 令牌。

添加帶有 Bearer 令牌的 Authorization Header 工作並正確授權。

中間件在每個請求上都被命中,成功獲取 cookie,並成功更新標頭(在上下文對象中)。


        public void Configuration(IAppBuilder app)
        {
            app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
            {
                TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret)),

                    ValidateLifetime = true
                }
            });

            app.Use(typeof(JWTMiddleware));

            var config = new HttpConfiguration();
            WebApiConfig.Register(config);

            app.UseWebApi(config);
        }


    public class JWTMiddleware: OwinMiddleware
    {
        public JWTMiddleware(OwinMiddleware next): base(next)
        {
        }

        public override async Task Invoke(IOwinContext context)
        {
            var name = "auth";
            var cookie = context.Request.Cookies[name];
            if (cookie != null)
            {
                if (string.IsNullOrEmpty(context.Request.Headers.Get("Authorization")))
                {
                    context.Request.Headers.Append("Authorization", "Bearer " + cookie);
                }
            }
            await Next.Invoke(context);
        }
    }

理想的工作流程是:

  1. Cookie(保存 JWT)與請求一起發送

  2. Owin 中間件攔截這個,從 cookie 中取出令牌並附加一個 Authorization 標頭

  3. API 調用使用 Authorization Bearer 標頭進行身份驗證。

如果有人對我這樣做的原因感到好奇....這樣我的網站就可以僅使用 http cookie 來存儲令牌,然后從需要承載令牌的設備中發送該令牌。

相反,我總是得到 401 未經授權。 我懷疑它試圖在令牌被 Owin 攔截之前對其進行身份驗證? 我不積極。

我相信我已經解決了這個問題。 這是一個兩部分的問題。

在我的 Startup.cs 中,這段代碼

                TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret)),

                    ValidateLifetime = true
                }
            });

導致 Owin 始終將令牌返回為未經授權。 我一定在某個時候改變了這一點並且從未重新檢查過。 我檢查了 ValidIssuer 和 ValidAudience,我們又好了。

另一個難題是在 JWT 身份驗證之前首先加載我的自定義中間件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM