【发布时间】:2018-03-24 11:44:50
【问题描述】:
我目前正在将第 3 方服务集成到我们的系统中(客户端的 AngularJS 和 ASP.NET Web API 2.0),这要求我们通过 OAuth2.0 对用户进行身份验证。
我目前正在使用隐式授权。但其中一项要求是同时支持 Edge 和 > IE10。
起初我使用的是以下流程:
- 客户端从 WebAPI 获取 3rd 方服务登录 url
- WebAPI 返回第 3 方服务登录 url,然后客户端打开一个带有登录 url 的新弹出窗口(忽略浏览器弹出窗口拦截器)并返回我们应用程序的 url
- 身份验证后,用户将被重定向回我们的应用程序,这是一个空白页面,其中包含用于从散列查询字符串中提取令牌然后将访问令牌存储到本地存储的 javascripts
- 关闭弹出窗口
- 在我的控制器中,我订阅了更改事件的存储。因此,当访问令牌设置到本地存储时,我的控制器将从本地存储中提取访问令牌并将其移动到会话存储中。
在我在 IE 和 Edge 上进行测试之前,这一切都运行良好。他们的本地存储不同步。 localStorage in win8.1 IE11 does not synchronize
为了让它在 IE 和 Edge 上运行,我换掉了本地存储并改用 cookie。然后,我没有在更改事件上订阅存储,而是有一个类似于以下函数的函数来每秒检查 cookie:
setInterval(function(){
// check cookie for cookie
// if found, copy cookie to session storage
// remove cookie
// change state
}, 1000);
仅供参考:我们将访问令牌存储在会话存储中,以防止用户打开多个标签来访问我们的网站。
这种方法有效,但有更好的解决方案吗?
【问题讨论】:
-
你能确认 Edge 仍然受到影响吗?
标签: javascript angularjs internet-explorer oauth-2.0 microsoft-edge