2015-12-17 3 views
0

Таким образом, мы включили Okta в нашем приложении для SSO решения с использованием пакета OWIN стека и Microsoft.Owin.Security.WsFederation NuGet. Кажется, что он хорошо работает в целом, однако у нас есть проблема, когда атрибут authorize для WebApi добавлен в микс. Атрибут custom authorize работает так же, как и для разрешений, предоставляемых с помощью строкового параметра, однако возникает проблема с поведением по умолчанию, возвращающим 401 response. Кажется, что это 401 наблюдается во всем мире, так как я никогда не ударил свой пользовательский компонент OWIN middleware для входа (то есть: перенаправить на Okta), но при этом возвращается запрос API, когда возвращается 302, который запускает перенаправление на Okta. Каждое сообщение, которое я прочитал, указывает, что следует следить за сообщением this от Брок Аллен, однако, как я уже упоминал, re-direct никогда не запускает этот код. Я подумал о создании Углового перехватчика, но мне совсем не нравится этот подход, поэтому я пошел с возвратом 403 (Forbidden) на данный момент из атрибута Authorize, который не идеален, но работоспособен. This SO сообщение, похоже, является основной дискуссией по этому вопросу, но мне не повезло после совета там. Вот код промежуточного программного обеспечения, который используется до сих пор, есть ли у кого-нибудь какие-либо мысли или идеи о том, как исключить/api-маршруты из перенаправленного в Okta?Microsoft.Owin.Security.WsFederation Пользовательские Авторизоваться Атрибут API Перенаправление

 var fileSystem = new PhysicalFileSystem(@".\wwwroot"); 

     var options = new FileServerOptions() 
     { 
      FileSystem = fileSystem, 
      EnableDefaultFiles = true, 
      EnableDirectoryBrowsing = true, 
     }; 

     app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(
      new CookieAuthenticationOptions 
      { 
       AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType, 
      }); 

     app.UseWsFederationAuthentication(
       new WsFederationAuthenticationOptions 
       { 
        MetadataAddress = ConfigurationManager.AppSettings["MetadataAddress"], 
        Wtrealm = ConfigurationManager.AppSettings["Wtrealm"], 
        TokenValidationParameters = 
        { 
         ValidAudience = ConfigurationManager.AppSettings["ValidAudience"] 
        } 
       }); 


     app.Map("/api", x => 
     { 
      dependencyResolver = x.UseApi(); 
     }); 

     app.UseFileServer(options); 
+1

Я бы рекомендовал взглянуть на http://www.cloudidentity.com/blog/2014/04/28/use-owin-azure-ad-to-secure-both-mvc-ux-and-web -api-в-одном-проекта /. Хотя почта использует OIDC, этот подход также должен работать с WSFed. – vibronet

+0

@vibronet Я бы хотел, чтобы вы опубликовали это как ответ, чтобы получить кредит, который должен быть получен. Эта статья разрешила мои проблемы, поскольку я не знал об атрибуте HostAuthentication. Я дам вам ответ, если вы опубликуете его. Еще раз спасибо, что блог никогда не приходил в мои исследования! – Shawn

+0

спасибо, сделаю! :) – vibronet

ответ

Смежные вопросы