0
我有一个工作WebApi2应用程序,它采用了承载令牌验证框,就像是在原来的Visual Studio项目模板。
我想添加一个自定义数据到生成的令牌,然后检查该自定义数据时,随后的api调用发生什么呈现此令牌。
为了举例说明,我希望在创建令牌时存储调用者的IP地址,然后在验证令牌时检查使用令牌的调用是否具有相同的IP。
我发现自定义类
public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
在我的项目,我也看到OAuthOptions
被配置为使用自定义类在启动时。
我想在哪里添加我的自定义标记数据(IP):
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
在这里我可以把它添加到售票属性自定义数据。
问题
但是我无法找出什么方法来核对令牌有这个数据,和它匹配的实际通话的IP,如果没有,则认为该令牌无效?
剩余在IP示例中,我不清楚在哪里,何时以及如何检查存储的IP,并且_reject_请求无效? –
@ g.pickardou在用户通过授权并将他的ip保存在声明中后,您可以创建自己的属性(继承ActionFilterAttribute)来验证传入的请求。然后在OnActionExecuting中,您可以编写: – grbulat
'var owinContext =(OwinContext)actionContext.Request.Properties [“MS_OwinContext”]; string ip = owinContext.Request.RemoteIpAddress; 权利要求userIpClaim =((ClaimsIdentity)actionContext.ControllerContext.RequestContext.Principal.Identity) .Claims .FirstOrDefault(C => c.Type == ClaimTypes.NameIdentifier); 如果(userIpClaim == NULL \t \t && string.CompareOrdinal(userIpClaim.Value,IP)!= 0){ actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode。未经授权); return; }' – grbulat