Adal.js - 属于不同租户/应用程序的多个用户帐户

时间:2015-12-06 17:35:32

标签: javascript angularjs azure-active-directory adal adal.js

在我们目前的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。

1 个答案:

答案 0 :(得分:0)

假设您的环境都有不同的域,则令牌缓存不应该成为问题 - 因为每个域都有自己的域。如果您在不同环境中重复使用相同的域,那么您也需要清理令牌。 您在这里遇到的主要问题是会话cookie,它跟踪用户的Azure AD 状态。如果您不想进行显式注销,唯一的选择是在请求中注入一些参数,向Azure AD发出信号,要求用户选择而不是尝试单点登录 - 类似于提示= select_account 。但是,这将要求您放弃JS调用级别,因为角度级别可扩展性点(extraqueryparameter init属性)将被添加到每个请求,包括必须保持沉默的请求,如令牌续订,从而无法进行API调用。回顾:切换环境时注销,或使用JS级别功能执行登录并注入提示= select_account。其他技巧包括使用inprivate,隐身,多种浏览器等