在我们目前的SPA中,我们在dev,test,uat等不同的租户中拥有相同的用户设置。 例如,用户john doe将具有以下a / cs。
jdoe@dev.onmicrosoft.com
jdoe@test.onmicrosoft.com
jdoe@uat.onmicrosoft.com
我们在AAD中为dev,test和uat注册了单独的应用程序。 当jdoe@dev.onmicrosoft.com登录到dev时会发生此问题 site为uat提供了一个缓存的令牌,然后尝试对其进行身份验证 uat或测试网站。我们最终得到以下错误。
其他技术信息:相关ID:xxxxxxx-fab9-4c08-a96f-a0c20gsgsgsgs时间戳:2015-12-06 17:14:34Z AADSTS50020:用户帐号' jdoe@uat.onmicrosoft.com 39;来自外部身份提供商' https://sts.windows.net/xxxxxxxxx/'应用程序&x; xxxxxxxx(uat ortest)'不支持。该帐户需要作为外部用户添加到租户中。请注销并使用Azure Active Directory用户帐户重新登录。
当用户尝试登录test / uat站点时,我想强制任何现有的缓存令牌,并强制用户重新登录并获取fesh令牌。
我试过使用
clearCache()
但这没效果。我想避免在登录前进行注销。
我正在使用adal.js v1.7。
答案 0 :(得分:0)
假设您的环境都有不同的域,则令牌缓存不应该成为问题 - 因为每个域都有自己的域。如果您在不同环境中重复使用相同的域,那么您也需要清理令牌。 您在这里遇到的主要问题是会话cookie,它跟踪用户的Azure AD 状态。如果您不想进行显式注销,唯一的选择是在请求中注入一些参数,向Azure AD发出信号,要求用户选择而不是尝试单点登录 - 类似于提示= select_account 。但是,这将要求您放弃JS调用级别,因为角度级别可扩展性点(extraqueryparameter init属性)将被添加到每个请求,包括必须保持沉默的请求,如令牌续订,从而无法进行API调用。回顾:切换环境时注销,或使用JS级别功能执行登录并注入提示= select_account。其他技巧包括使用inprivate,隐身,多种浏览器等