所以我有一个 MVC6 应用程序,其中包括一个身份服务器(使用 ThinkTecture 的 IdentityServer3)和一个 MVC6 Web 服务应用程序。
在 Web 服务应用程序中,我在 Startup 中使用此代码:
app.UseOAuthBearerAuthentication(options =>
{
options.Authority = "http://localhost:6418/identity";
options.AutomaticAuthentication = true;
options.Audience = "http://localhost:6418/identity/resources";
});
然后我有一个控制器,其动作具有该Authorize
属性。
我有一个 JavaScript 应用程序,它通过身份服务器进行身份验证,然后使用提供的 JWT 令牌来访问 Web 服务操作。
这有效,我只能使用有效令牌访问该操作。
当 JWT 过期时,问题就来了。我得到的是一个冗长的 ASP.NET 500 错误页面,它返回以下异常的异常信息:
System.IdentityModel.Tokens.SecurityTokenExpiredException IDX10223:生命周期验证失败。令牌已过期。
我对 OAuth 和一般的 Web API 保护还很陌生,所以我可能有点偏离基础,但对于过期的令牌来说,500 错误对我来说似乎不合适。这对 Web 服务客户端绝对不友好。
这是预期的行为吗?如果不是,我需要做些什么来获得更合适的响应吗?