标题几乎说明了一切,但请允许我详细说明一下。 情况是我有一个使用adal.js的javascript SPA。必须将应用程序的新用户放置在适当的Azure AD角色中才能访问应用程序。如果用户所在的租户已订阅了该应用程序,但没有必要的角色,则访问该网站,则会收到一条消息,提示他没有访问权限。
但是,即使在租户管理员将有问题的用户设置为适当的角色之后,刷新浏览器后,该用户仍然似乎无权访问,b / c adal使用的是缓存令牌(因此,令牌将显示陈旧的角色)。用户被迫退出,然后重新登录,这是一种低于标准的体验,而不是我们想要的体验。
我意识到还有其他解决方案,例如直接调用Graph来获取角色,但这需要委托访问,而我们的应用程序目前(此时)尚不具备这种访问权限,因此我们处于后期阶段游戏,因此暂时无法执行此操作。
但是,如果我们可以指示ADAL将当前令牌视为已过期,则推测adal将使用其隐藏的iframe技巧来获取新的/新鲜的令牌。但是,建议使用会话或本地存储来使令牌失效,这似乎是不明智的,并且在任何情况下都无法达到预期的结果,在f5刷新时b / c,将视为用户未登录。
真正的目标是在将用户置于适当的角色后,简单的f5会重新加载应用程序(而不会强迫用户再次登录)并拥有最新的令牌。
这可能吗?我能够通过攻击adal.js本身来实现这一目标,但我想我可以与出色的SO社区进行检查,看看是否还有其他方法?
我还应该指出,仅对全选令牌(而不是所有调用)进行选择调用才需要这样做。由于adal.js的AuthenticationContext具有单一属性,因此这很棘手。
对adal.js的攻击相当容易,我相信(至少在我的测试中似乎有效),第三个可选参数acquireToken会指示成功,该参数指示是否对该调用使用TokenCache。我曾考虑为此为此向adal.js GitHub提交PR,但我再次想,也许SO社区也许能在我走这条路之前启发我。