我正在开发ASP.NET Web API
应用程序,该应用程序使用OAuth
(owin
)协议来验证我的客户端。在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响应而没有登录页面。
是否可以在我的混合环境中实现,还是应该拆分我的解决方案?
答案 0 :(得分:0)
CookieAuthenticationProvider
有一个自定义此行为的处理程序
Provider = new CookieAuthenticationProvider()
{
OnApplyRedirect = ctx =>
{
// check if ctx is an API request
if (!IsApiRequest(ctx))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}