2016-04-13 2 views
1

Web API 2 RESTサービスがあります。私たちは基本的なOWIN oAuthトークン認証を使用しており、httpsが必要です。基本httpでリクエストが行われたときに403 HTTPSの必須エラーを確認して返すRequireHttpsAttributeフィルタを追加しました。/トークン呼び出しがセキュアでない場合、Web APIは403を返します。

私たちの/トークンのリクエストです。トークンを要求すると、403エラーが返されません。 Startup.Auth.cs設定ファイルでAllowInsecureHttp = falseを設定します。これにより、ユーザーは安全でない呼び出しでトークンを要求できなくなります。

しかし、この呼び出しが行われると、私たちが望む403 HTTPSではなく404 Not Foundエラーが発生します。誰も私はこのエラーを修正する方法を見つけるのを助けることができますか?

私はRequireHttpsAttributeを使用していないことを認識しています。これは、通常の認証の外部で起こっていることです。これが、その認証用のトークンを取得する方法です。だから私は安全な接続をどこで調べるべきかわからない。私はGrantResourceOwnersCredentialsメソッドのAuthenticationOAuthProvidersクラスを試しました。ユーザー名とパスワードを認証する前にhttpsのチェックを入れましたが、そこからHTTPコードエラーを発生させることができませんでした。

+0

要求がcontext.Request.Uri.Schemeを使用して安全であり、それは私がcontext.setError(「HTTPS必要な操作を行うことができます場合、私はGrantResourceOwnerCredentialsアクションで識別することができます"、"要求にHTTPが必要です ")、それでもエラー400 Bad Requestに戻ります。私はcontext.Response.StatusCode = 403を試みましたが、それを無視するようです。 –

答えて

1

Web APIフィルタの代わりに、Owinパイプラインの先頭に単純なOwinミドルウェアを使用できます。このようにして、アプリケーションに対して行われたすべてのリクエストをキャッチします。ここで

は小さなサンプルです:

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(..) 
    } 
} 
関連する問題