2016-04-13 59 views
1

我們有一個Web API 2 REST服務。我們使用基本的OWIN oAuth令牌認證,我們需要https。我們添加了一個RequireHttpsAttribute過濾器,用於在使用基本http進行請求時檢查並返回一個403 HTTPS Required錯誤。Web API,當/令牌調用不安全時返回403

問題是我們的/令牌請求。當我們請求我們的令牌時,我們不會返回403錯誤。在Startup.Auth.cs配置文件中,我們設置了AllowInsecureHttp = false。因此,這可以防止用戶通過不安全的呼叫請求令牌。

但是,當進行此調用時,我們會得到404 Not Found錯誤,而不是我們想要的403 HTTPS Required。任何人都可以幫我弄清楚如何解決這個錯誤?

我知道我們沒有使用RequireHttpsAttribute,因爲這是普通身份驗證之外的偶然符號,這就是我們如何獲得該身份驗證的令牌。所以我不確定我應該在哪裏檢查安全連接。我在GrantResourceOwnersCredentials方法中的AuthenticationOAuthProviders類中嘗試過。在對用戶名和密碼進行身份驗證之前,我對https進行了檢查,但無法從此處引發HTTP代碼錯誤。

+0

我可以在GrantResourceOwnerCredentials動作識別請求是否安全使用context.Request.Uri.Scheme,它允許我做一個context.setError(「HTTPS必需「,」請求的HTTP需要「),但它仍會作爲錯誤400錯誤請求返回。我嘗試了context.Response.StatusCode = 403,但它似乎忽略了這一點。 –

回答

1

您可以嘗試在Owin流水線的開頭使用簡單的Owin中間件,而不是Web API過濾器。這樣你就可以捕獲對你的應用程序提出的每一個請求。

這裏是一個小例子:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.Use(async (ctx, next) => 
     { 
      if (ctx.Request.Scheme.Equals(Uri.UriSchemeHttps)) 
       await next.Invoke(); 
      else 
       ctx.Response.StatusCode = 403; 
     }); 

     //other middlewares 
     //app.UseWebApi(..) 
    } 
}