我遵循本文以获得从.Net Web API发出的JWT http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/
TL; DR
如何在Authorize属性中添加其他逻辑,以根据JWT(也许是JwtBearerAuthenticationOptions)中的特定声明检查数据库表?
长版本...
生成JWT并在对包含Authorization标头的控制器发出请求时对其进行验证也可以正常工作。
基本上,该文章不涉及的是撤销...
经过大量的搜索,我发现有几种方法可以处理JWT的吊销。
我选择了“白名单”路由,因此创建了一个表来存储UserId,ClientId(受众群体)和包含JTI值(GUID)的列。
基本上,我想在[Authorize]属性中添加其他逻辑,以便也在此表中检查给定User和ClientId的匹配JTI ...
做到这一点而不必编写自定义的'JWTAuthorize'属性,因为我很想使用默认值...
我怀疑这是需要在JwtBearerAuthenticationOptions中指定的东西吗?
干杯!
答案 0 :(得分:0)
我已经成功地通过JwtBearerAuthenticationOptions上的自定义提供程序使此工作正常进行。
提供程序从IOAuthBearerAuthenticationProvider继承,然后我专门使用ValidateIdentity方法来处理其他逻辑。
public Task ApplyChallenge(OAuthChallengeContext context)
{
return Task.FromResult<object>(null);
}
public Task RequestToken(OAuthRequestTokenContext context)
{
return Task.FromResult<object>(null);
}
public Task ValidateIdentity(OAuthValidateIdentityContext context)
{
string userId = // user id from Token...
Guid tokenId = // jti from Token...
string appId = // aud/client id from Token...
//do the DB check here...
if (CheckUserToken(userId, tokenId, appId))
{
return Task.FromResult<object>(null);
}
else
{
context.SetError("unauthorized_access", "The supplied security identity for this user is not valid.");
return Task.FromResult<object>(null);
}
}
然后,我在客户端处理错误,以确定将用户重定向到何处...
如果有人有更好的建议,我希望看到他们:)