2017-07-09 5 views
0

WebApiを使用しているMVCプロジェクトで簡単なCookieおよびベアラトークンの承認を受けています。自分の標準MVCコントローラでBearerによるアクセスを無効にしたいベアラトークンを使用して標準MVCコントローラへのアクセス要求を無効にする方法

これが私の状況は以下のようになります。ベアラ

  • Web APIをコントローラがアクセスまたはクッキー::のみベアラ
    • 標準MVCコントローラはにアクセス私は持っている:

      • 標準MVCコントローラはにアクセス:のみクッキー
      • Web APIをコントローラはにアクセス:のみベアラ

      WebApiConfig.cs

      public static class WebApiConfig 
      { 
          public static void Register(HttpConfiguration config) 
          { 
           config.MapHttpAttributeRoutes(); 
      
           config.Routes.MapHttpRoute(
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{action}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
           ); 
           config.SuppressDefaultHostAuthentication(); 
           config.Filters.Add(new HostAuthenticationFilter("Bearer")); 
          } 
      } 
      

      Startup.Auth.cs

      public partial class Startup 
      { 
          public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; } 
          public void ConfigureAuth(IAppBuilder app) 
          { 
           app.CreatePerOwinContext(ApplicationDbContext.Create); 
           app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
           app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 
      
           OAuthBearerOptions = new OAuthBearerAuthenticationOptions(); 
           app.UseOAuthBearerAuthentication(OAuthBearerOptions); 
           app.UseCookieAuthentication(new CookieAuthenticationOptions 
           { 
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
            LoginPath = new PathString("/Account/Login"), 
            Provider = new CookieAuthenticationProvider 
            { 
             OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
              validateInterval: TimeSpan.FromMinutes(30), 
              regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
            } 
           }); 
      } 
      

      それは、カスタム認可属性を持つことは可能ですか?このように:[承認(「OnlyCookie」]

      私は同様のソリューションを見ましたが、それはSinglePageAplicationのためだった、と私は私の.NET MVC 4アプリケーションでそれを実装する方法を知らない - 私はここでそれを見た:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme

      私は「AuthenticationScheme = 『クッキー』」を追加しようとしたとき、compilatorは私にエラーを与える:CookieAuthenticationOptionsは、あなたが使用していないので、あなたはそのプロパティをしませんAuthenticationScheme

    答えて

    1

    の定義が含まれていません」 ASP.Net Core。あなたが投稿したリンク私たちの質問はASP.NetのコアではなくASP.NEtのMVCです。

    カスタム認可フィルタ属性を作成することによっても同じことができます。

    public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
        public string AuthenticationType { get; private set; } 
    
        public CustomAuthorize(string authenticationType) 
        { 
         if (string.IsNullOrWhiteSpace(authenticationType)) 
         { 
          throw new ArgumentNullException(nameof(authenticationType)); 
         } 
    
         this.AuthenticationType = authenticationType; 
        } 
    
        protected override bool AuthorizeCore(HttpContextBase httpContext) 
        { 
         if (!httpContext.User.Identity.AuthenticationType.Equals(this.AuthenticationType, StringComparison.InvariantCultureIgnoreCase)) 
         { 
          return false; 
         } 
    
         return base.AuthorizeCore(httpContext); 
        } 
    } 
    

    だから、あなたはあなたのコントローラ上でこのようにそれを使用することができます:

    [CustomAuthorize(DefaultAuthenticationTypes.ApplicationCookie)] 
    
    それ CustomAuthorizeAttributeと実装がされる名前をしてみましょう
    関連する問題