【发布时间】:2016-09-28 18:22:51
【问题描述】:
对于以下场景:
- 用户代理(浏览器、用户)向资源服务器发出 Ajax 请求
- 使用 DotNetOpenAuth(客户端)的 ASP.NET MVC 应用程序
- OAuth 授权服务器
- ASP.NET Web API(资源服务器)
用户输入他的凭据以登录到 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 中删除令牌并使服务器端的令牌无效。
【问题讨论】:
标签: c# asp.net-mvc oauth authorization dotnetopenauth