C# 检查';白名单';[Authorize]属性期间的表(ASP.Net MVC5 Web API JWT)
我根据本文获得了从.NETWebAPI发布的JWTs TL;DR 如何向Authorize属性添加额外的逻辑,以便根据JWT中的特定声明(可能是JWTBeareAuthenticationOptions中的声明)检查数据库表 更长版本… 它可以很好地生成JWT,并在对控制器(包括授权头)发出请求时对其进行验证 基本上,这篇文章没有涉及撤销 经过大量的谷歌搜索,我发现有几种处理JWTs撤销的方法 我选择了“白名单”路由,因此创建了一个表来存储UserId、ClientId(观众)和一个包含JTI值(GUID)的列 基本上,我想向[Authorize]属性添加额外的逻辑,以检查该表中给定用户和客户端ID的匹配JTI 这是可行的,而不必写一个自定义的'JWTAuthorize'属性,因为我很想使用默认的 我怀疑这是需要在JWTBeareAuthenticationOptions中指定的内容C# 检查';白名单';[Authorize]属性期间的表(ASP.Net MVC5 Web API JWT),c#,asp.net-mvc,asp.net-web-api2,jwt,owin,C#,Asp.net Mvc,Asp.net Web Api2,Jwt,Owin,我根据本文获得了从.NETWebAPI发布的JWTs TL;DR 如何向Authorize属性添加额外的逻辑,以便根据JWT中的特定声明(可能是JWTBeareAuthenticationOptions中的声明)检查数据库表 更长版本… 它可以很好地生成JWT,并在对控制器(包括授权头)发出请求时对其进行验证 基本上,这篇文章没有涉及撤销 经过大量的谷歌搜索,我发现有几种处理JWTs撤销的方法 我选择了“白名单”路由,因此创建了一个表来存储UserId、ClientId(观众)和一个包含JTI
干杯 我已经通过使用服务器上的自定义提供程序成功地实现了这一点 提供程序继承自,然后我专门使用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);
}
}
公共任务ApplyChallenge(OAuthChallengeContext)
{
返回Task.FromResult(空);
}
公共任务请求令牌(OAuthRequestTokenContext上下文)
{
返回Task.FromResult(空);
}
公共任务ValidateIdentity(OAuthValidateIdentityContext上下文)
{
字符串userId=//来自令牌的用户id。。。
Guid tokenId=//来自令牌的jti。。。
字符串appId=//来自令牌的aud/客户端id。。。
//在这里做DB检查。。。
if(CheckUserToken(userId、tokenId、appId))
{
返回Task.FromResult(空);
}
其他的
{
SetError(“未经授权的_访问”,“为此用户提供的安全标识无效”);
返回Task.FromResult(空);
}
}
然后我在客户端处理错误,以决定将用户重定向到何处等
如果有人有更好的建议,我很乐意看到:)