如果过期令牌,则表单身份验证和OAuth for Web API项目的混合不会返回401

时间:2017-01-28 23:26:00

标签: asp.net asp.net-mvc oauth asp.net-web-api2 forms-authentication

我正在开发ASP.NET Web API应用程序,该应用程序使用OAuthowin)协议来验证我的客户端。在API的初始版本之后的某个时间我添加了额外的表单身份验证(基于cookie)并在其上添加了ASP.NET MVC app。现在,在启动期间我

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

// oauth
app.UseOAuthAuthorizationServer

它非常完美,我的MVC用户可以调用我的API而无需进行身份验证,这很酷。唯一的缺点是它现在导致很多问题,当我的API客户端尝试使用过期的令牌而不是401错误来访问API时,我的登录页面得到200和html响应。

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

Response:
200 <html>

我需要的是任何带有过期令牌的API请求都应该导致403 http响应而没有登录页面。

是否可以在我的混合环境中实现,还是应该拆分我的解决方案?

1 个答案:

答案 0 :(得分:0)

CookieAuthenticationProvider有一个自定义此行为的处理程序

Provider = new CookieAuthenticationProvider()
{
     OnApplyRedirect = ctx =>
     {
         // check if ctx is an API request
         if (!IsApiRequest(ctx))
         {
             ctx.Response.Redirect(ctx.RedirectUri);
         }
     }
}