2016-07-01 21 views
0

WebAPIでMVC5を使用するプロジェクトがあります。認証はOwinを使用します。 Ninject依存リゾルバを設定したい。 MVC5、MVC5 for Owin、WebAPI with Owinを使ってWebApiを試しました。しかし、私はそれらを組み合わせることはできません。誰もMVC5 + WebApi + Owin + Ninjectバンドルの手順を持っていますか?最後の解決策のMVC5 + WebAPI + Owin + Ninject

一つWEBAPIため、それが実行可能にする私はここに続く: https://github.com/ninject/Ninject.Web.Common/wiki/Setting-up-a-OWIN-WebApi-application

を私は、最新のNuGetパッケージを追加しました。 My Startupクラス:

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var webApiConfiguration = new HttpConfiguration(); 
     WebApiConfig.Register(webApiConfiguration); 
    app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(webApiConfiguration); 
     ConfigureAuth(app); 
    } 

    private static StandardKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 
     return kernel; 
    } 
} 

WebApiConfig。私はルーティング設定を追加しませんでした。それはGlobal.asaxの中に追加される:ルーティング(およびGlobal.asaxので除去ルーティング登録)と

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var webApiConfiguration = new HttpConfiguration(); 
     app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(webApiConfiguration); 
     ConfigureAuth(app); 
    } 

    private static StandardKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 
     return kernel; 
    } 
} 

WEBAPIそれはあまりにも動作しません。

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var webApiConfiguration = new HttpConfiguration(); 
     // Web API configuration and services 
     // Configure Web API to use only bearer token authentication. 
     webApiConfiguration.SuppressDefaultHostAuthentication(); 
     webApiConfiguration.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     webApiConfiguration.MapHttpAttributeRoutes(); 
     webApiConfiguration.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }); 
     app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(webApiConfiguration); 
     ConfigureAuth(app); 
    } 

    private static StandardKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 
     return kernel; 
    } 
} 

ConfigureOAuth:私が持っているすべてのWEBAPI「{」「:」許可この要求に対して拒否されました。メッセージ「}」への各リクエストに応じて。私はトークンに基づいて別のクッキーに基づいて双方向認証を使用しています。 WebApiに適したMVC:

public void ConfigureAuth(IAppBuilder app) 
    { 

     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Login"), 
      Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, User>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager,DefaultAuthenticationTypes.ApplicationCookie)) 
      } 
     }); 

     PublicClientId = "self"; 
     OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new ApplicationOAuthProvider(PublicClientId), 
      AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
      AllowInsecureHttp = true 
     }; 
    } 

そして、私のAPIコントローラです。

[Authorize(Roles = "Admin")] 
public class AdminPanelController : ApiController 
{ 
    private readonly IAdminPanelService _service; 
    public AdminPanelController(IAdminPanelService service) 
    { 
     _service = service; 
    } 
} 

私は常にAdminPanelControllerをパラメータなしにする必要があります。 WebApiConfigにルーティングを追加すると、AdminPanelControllerと同じ例外が発生し、他のものは許可されません(ベアラトークンが生成してWebApiコントローラに渡します)。

+0

私はこの設定をしており、動作します。あなたがそれらを組み合わせることはできないと言ったら、どちらの部分は動かないのですか?これまでに何を持っていますか? – ngm

+0

@ngm。メッセージを更新しました。それを見直してください。 – Archon

答えて

0

Web APIを使用するためにDependency Injectionを使用するには、IDependencyResolver forそれをHttpConfiguration.DependencyResolverに適用します。

詳細はhereを参照してください。あなたはNuGetパッケージhereを見つけることさえできます。

関連する問題