对于以下情况:
用户输入他的凭据以登录MVC应用程序。 MVC应用程序使用用户凭证和MVC应用程序的Client.Id + Client.Secret使用密码授权向授权服务器发出令牌请求。 来自授权服务器的MVC应用程序接收OAuth令牌。 令牌将传递回客户端,客户端将令牌存储在LocalStorage中。
现在我的问题:
如何使令牌无效,因此用户无法再访问资源服务器(Web API)。由于令牌现在驻留在LocalStorage中,因此MVC应用程序无法再控制令牌。解决方案可能是使用非常短的过期时间或使用一些SignalR
内容来使令牌无效,但是有足够的时间让已获得令牌访问权限的恶意用户做出错误的事情。我认为没有办法立即使令牌无效。并且资源服务器在它真正到期之前不会知道该令牌是无效的。
如果令牌已过期,流量会是多少?我可以在浏览器中使用JavaScript检查到期日期,或者等待资源服务器的401响应,并向我的MVC应用程序(客户端)发出Ajax刷新令牌请求,然后从授权服务器请求新令牌(使用Client.Id + Client.Secret + UserCredentials)并将新令牌传递回浏览器,然后可以将其用于对资源服务器(Web API)的进一步请求。这是正确的做法吗?
在注销/密码更改时,我可以从LocalStorage中删除令牌,并在服务器端使令牌无效。
答案 0 :(得分:1)
我认为你几乎已经回答了自己的问题! 您不能在服务器端使令牌无效(除非DNOA处理令牌撤销,我认为它没有)。 令牌是承载令牌,因此拥有它的人可以在资源服务器上使用它,直到达到到期时间。保持昙花一现是最好的方法。
此外,在使用密码授予时,您应该只使用用户的凭据一次,以获取初始令牌和刷新令牌。然后,您可以将刷新令牌与MVC应用程序中的用户ID相关联,并在将来使用刷新令牌来获取新的访问令牌。