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

标签 javascript azure authentication active-directory single-sign-on

Error错误 AADSTS50059:在请求中或任何提供的凭据中均未找到租户标识信息。

<小时/>

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

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

<小时/>

进一步了解

第一季度 因为我们的 AAD 位于同一租户下。一个 AAD 生成的 cookie 是否以某种方式影响另一个 AAD。如果是这样,什么被覆盖/失效/删除。

我读到,在 SSO 首次登录期间,身份验证服务器会发出一个身份验证 cookie,除此之外,SSO 处理身份验证的每个站点都是在该 cookie 的帮助下完成的,并且还提供了相应的站点 cookie生成的。 Reference

问题2 在 Azure AD 的 SSO 机制中,身份验证 Cookie 是什么以及在哪里?我可以查看两个 cookie,其中一个存储在本地存储中()

local storage

还有一个

site cookie

<小时/>

第三季度

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

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

最佳答案

Q1 As we have both the AAD's under the same tenant. Is somehow the cookie generated by one AAD affecting the other AAD. If so what is being overwritten / invalidated / deleted.

当您从第一个应用程序注销时,SSO cookie 将从 AAD 中删除。 这意味着 Azure AD session 不再事件。

Q2 What and where is the authentication cookie during the SSO mechanism with Azure AD? I can look at two cookies one stored in local storage()

当您位于 Azure AD 域时,您需要查看 cookie。 这是您应用程序的本地存储和 Cookie,而不是 Azure AD 的。

Q3 I get it that SSO is used to login to various apps at the same time and a single logout would log us out of all apps but consider I have office and devops at two different subdomains. It does not mean that if I logout of office that I get logged out of devops as well right..

是的,这就是单点登录的工作原理。 如果您告诉 Azure AD 将您注销,它将终止您的 session ,这将影响依赖于该 session 处于事件状态的所有应用程序。

How can we achieve this using the configuration of two AAD's under the same tenant?

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

要在应用程序中保持 session 处于事件状态,即使 AAD session 已删除, 您的应用程序需要保持自己的 session ,并且在身份验证后不依赖于 AAD。 因此,在身份验证之后,您的应用程序后端可以发出 cookie 或 token ,然后您的前端应该在调用后端时使用它。 如果您需要以用户身份获取 Azure AD 访问 token ,可以使用刷新 token 从后端获取它们。 但对于前端应用程序来说,如果没有事件的 AAD session ,实际上无法代表用户获取访问 token 。 而且您无法从前端应用程序“作为应用程序”获取 token ,因为无法对应用程序进行身份验证。

所以这要看情况。 在您的场景中,如果您想将应用程序与 Azure AD 断开连接,您可以在应用程序中保留 session 。

但通常单点登录 (SSO) 应该按照原来的方式工作。 关键是可以很容易地从所有服务中注销。

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

相关文章:

javascript - saga 的高阶函数为 sagan 函数注入(inject)参数

powershell - 使用 Powershell 获取 Azure AD token (jwt)

php - 如何在 codeigniter 中创建用户时创建空行

django - 登录后重定向到另一个页面

javascript - 上传多个文件时出现异步问题

javascript - JQuery:单击 div 编辑表格

Javascript回调函数传递给Android

azure - Microsoft Azure 存储工具 - AzCopy :batch command for scheduling

sql-server - Azure SQL Server 系统数据库

html - 绝对中心登录表单隐藏 bootstrap 3