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コントローラに渡します)。
私はこの設定をしており、動作します。あなたがそれらを組み合わせることはできないと言ったら、どちらの部分は動かないのですか?これまでに何を持っていますか? – ngm
@ngm。メッセージを更新しました。それを見直してください。 – Archon