1
我所有的REST API方法开始与该代码如下:如何避免使用样板代码验证ASP.NET Web API 2中的JWT令牌?
[HttpPost]
[Route("Login")]
public async Task<IHttpActionResult> Login(QueryModel q)
{
// get JWT Token string form HTTP Header
string token = Request.Headers.GetValues("Authorization").FirstOrDefault();
// decode token
string json = Jose.JWT.Decode(token, JWTModel.secretForAccessToken);
JWTModel jwt = JsonConvert.DeserializeObject<JWTModel>(json);
// check if issued from my homepage.
if (!jwt.iss.Equals("my-home-page.com"))
{
return Content(
HttpStatusCode.Unauthorized,
"access token is not from here"
);
}
// check if it has valid about time
long now = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
if (jwt.iat > now || jwt.exp < now)
{
// request refresh token
return Content(
HttpStatusCode.Unauthorized,
"outdated access token"
);
}
/* ... */
}
多么可笑和多余的是他们!
我可以简化和调整它们吗?如何?
(在Node.js的,我可以用所谓的中间件解决这个问题。)
我不使用OWIN,但DelegatingHandler看起来很爽。我将立即将其应用于我的代码!我会报告结果。 –
我终于实现了使用'DelegatingHandler'清理我的代码! [此文档](https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers#example-checking-for-an-api-key)也有帮助。 –