0

Я разрабатываю приложение ASP.NET Web API, которое использует протокол OAuth (owin) для аутентификации моих клиентов. Через некоторое время после первоначальной версии API я добавил дополнительную проверку подлинности на основе форм (cookie based) и смешал приложение ASP.NET MVC поверх него. Теперь, во время запуска яМикс аутентификации форм и проект OAuth для веб-API не возвращаются 401 в случае просроченного токена

// forms 
app.UseCookieAuthentication(... options ...); 
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

// oauth 
app.UseOAuthAuthorizationServer 

Она работает идеально, и мои MVC пользователи могут позвонить своему API без необходимости быть заверены это круто. Единственный недостаток, который вызывает множество проблем, заключается в том, что когда мои клиенты API пытаются получить доступ к API с истекшим токеном вместо ошибки 401, я получаю 200 и html-ответы моей страницы входа.

Request: 
GET https://server.com/api/v1/controller/action1 
Authoration: bearer <expired token here> 

Response: 
200 <html> 

Что мне нужно, так это то, что любой запрос API с истекшим токеном должен приводить к 403 ответам HTTP и странице входа в систему.

Можно ли достичь в моей смешанной среде или мне нужно разделить мое решение?

ответ

0

CookieAuthenticationProvider имеет обработчик, чтобы настроить это поведение

Provider = new CookieAuthenticationProvider() 
{ 
    OnApplyRedirect = ctx => 
    { 
     // check if ctx is an API request 
     if (!IsApiRequest(ctx)) 
     { 
      ctx.Response.Redirect(ctx.RedirectUri); 
     } 
    } 
} 
Смежные вопросы