azure - AAD AcquireToken 返回错误 AADSTS50000

标签 azure azure-active-directory

我们使用 Azure Active Directory 来保护我们的 Azure 托管 API。这些 API 由 Azure 托管的 Angular 应用程序使用。 Mocst 的 API 是作为 ASP.NET WebAPI 实现的,其中一些现在是使用 Azure Functions 实现的。

过去几年我们一直以这种方式保护我们的应用程序,没有遇到任何问题。我们已经通过将一个应用程序添加到允许的受众来根据另一个应用程序的 token 授予对另一个应用程序的访问权限,效果很好。目前,我们在实现新场景时遇到了问题。

问题
我们有两个应用程序:当前应用程序 (cur) 和目标应用程序 (tar)。我们所有的用户都可以登录curcur 的后端根据用户获取的 cur token 获取访问 tar 的 token 。这适用于由 Azure Active Directory(我们的或联合的)支持的用户。一旦用户登录不受 Azure Active Directory 支持(这意味着他们由 Microsoft 帐户支持),获取 tar 的 token 就会失败,并显示 AADSTS50000: There was an error issuing a token

上下文
我们的应用程序托管在与我们的用户和应用程序注册的地方不同的 AAD 租户中。用户和应用注册位于同一个 AAD 租户中。我们认为这不是问题,因为配置适用于 AAD 支持的帐户。

我们使用 AuthenticationContext.AcquireTokenAsync(String, ClientCredential, UserAssertion) 获取 token 来访问带有以下参数的 tar:

  • tar 应用程序的 ID
  • cur的 ID 和 key
  • 当前用户的 token cur

我们发现 AAD 支持的帐户和 Microsoft 帐户支持的帐户的原始 token 之间存在一个主要区别:IDP (IdentityProvider) 字段不同。对于 Microsoft 帐户支持的帐户,IDP 为 live.com 。对于 AAD 支持的帐户,这是 https://sts.windows.net/<guid>

我们在 AAD 和外部帐户中创建了多个测试帐户,以确保这不是与我们现有用户帐户相关的问题。对 AuthenticationContextClientCredential 使用不同的配置并不能解决问题。

有什么想法吗?

最佳答案

邀请用户作为访客可以,但如果这不是一个实际的选择,您需要在应用/服务中添加对 MSA 帐户的支持。这可以通过 Azure AD v2.0 端点实现。

文档Comparing the Azure AD v2.0 endpoint with the v1.0 endpoint在开始进行更改之前,您需要了解许多详细信息。

尝试 Azure Active Directory code samples (v2.0 endpoint) 中提供的一些示例以获得良好的理解。

您将进行的更改的简短摘要

  1. 使用较新的 MSAL 库而不是 ADAL。
  2. 使用scopes instead of resource
  3. 使用新的 App registration (Preview) portal.
  4. 更新您的应用注册以支持 AAD 和 MSA 帐户。请参阅 Azure Active Directory app manifest 中的 signInAudience .

关于azure - AAD AcquireToken 返回错误 AADSTS50000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830555/

相关文章:

silverlight - Windows系列电话7 "Cloud"

azure - 有条件地将 Blob 数据复制到 Azure 数据工厂中的 Sql 数据库

azure-active-directory - 如果使用 msal.js,则在登录期间丢失“让我登录”消息

Azure 函数(时间触发器)仅在打开 Azure 门户时触发

java - 从 Java 对象生成 CSV 并移动到 Azure 存储,无需中间位置

Azure BlockBlob 从流上传的内容长度始终为 0

azure - AcquireTokenAsync 函数不返回任何响应

与 MFA 提示相关的 Azure AD SAML 不一致

azure - 为 Outlook 生成 token 然后与 graphapi 交换时出现格式错误

javascript - Angular websocket 无法在生产环境中与 Azure VM nginx 配合使用,但可以在本地使用