javascript - 通过Azure AD身份验证进行单点登录(SSO)时出错-AADSTS50059-LMLPHP错误AADSTS50059:在请求中找不到或任何提供的凭据暗含的租户标识信息。



在同一个租户下,我们有两个子域(sd1.domain.com和sd2.domain.com)注册到两个不同的AAD应用程序(客户端ID:sd1和客户端ID:sd2)。我们已经为两个子域上托管的角度应用程序配置了SSO。

方案:当我登录到两个子域,然后从其中一个子域注销(让说sd1)并尝试刷新另一个子域(sd2)中的页面时,身份验证失败,并出现上述指定错误。



进一步了解

Q1因为我们两个AAD在同一个租户下。是某种方式由一个AAD生成的cookie影响另一个AAD。如果是这样,正在被覆盖/无效/删除的内容。

我已经读到,在SSO首次登录期间,身份验证服务器会发出一个身份验证cookie,最重要的是,在该cookie的帮助下,SSO进行身份验证的每个站点都将完成,并且还会生成相应的站点cookie。 aa>

Q2在使用Azure AD的SSO机制中,身份验证cookie在什么地方?我可以看看两个存储在本地存储中的Cookie()

Reference

还有一个

javascript - 通过Azure AD身份验证进行单点登录(SSO)时出错-AADSTS50059-LMLPHP r



Q3

我知道SSO用于同时登录各种应用程序,而一次注销将使我们退出所有应用程序,但考虑到我在两个不同子域中都有office和devops。这并不意味着如果我退出办公室,那么我也将退出devops。

我们如何在同一租户下使用两个AAD的配置来实现这一目标?

最佳答案

Q1因为我们两个AAD在同一个租户下。是某种方式由一个AAD生成的cookie影响另一个AAD。如果是这样,正在被覆盖/无效/删除的内容。


当您从第一个应用程序注销时,将从AAD中删除SSO cookie。
这意味着Azure AD会话不再处于活动状态。


  Q2在使用Azure AD的SSO机制中,身份验证cookie在什么地方?我可以看看两个存储在本地存储中的Cookie()


在Azure AD域中时,需要查看cookie。
那是您应用程序的本地存储和cookie,而不是Azure AD。


  问题3,我知道使用SSO同时登录各种应用程序,一次注销将使我们退出所有应用程序,但考虑到我在两个不同的子域中都有office和devops。这并不意味着如果我退出办公室,那么我也将退出devops。


是的,这就是单点登录的工作方式。
如果您告诉Azure AD注销,它将终止您的会话,这将影响所有依赖该会话处于活动状态的应用程序。


  我们如何在同一租户下使用两个AAD的配置来实现这一目标?


首先,您的Azure AD租户中有两个应用程序,而不是“两个AAD”。

为了即使您删除了AAD会话,也可以在应用程序中保持会话活动,
您的应用程序需要保留自己的会话,并且在身份验证后不依赖AAD。
因此,在身份验证之后,您的应用程序后端可以发出cookie或令牌,然后您的前端应将其与后端调用一起使用。
如果您需要以用户身份获取Azure AD访问令牌,则可以使用刷新令牌从后端获取它们。
但是对于前端应用程序,如果没有活动的AAD会话,实际上是无法代表用户获取访问令牌的。
而且,由于无法对应用程序进行身份验证,因此您无法从前端应用程序“作为应用程序”获得令牌。

因此,这取决于。
在您的方案中,如果您希望将会话与Azure AD断开连接,则可以在其中保留会话。

但是通常希望SSO能够像以前那样工作。
关键是可以很容易地从所有服务中注销。

关于javascript - 通过Azure AD身份验证进行单点登录(SSO)时出错-AADSTS50059,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58938063/

10-11 12:16