我们使用 Azure Active Directory 来保护我们的 Azure 托管 API。这些 API 由 Azure 托管的 Angular 应用程序使用。 Mocst 的 API 是作为 ASP.NET WebAPI 实现的,其中一些现在是使用 Azure Functions 实现的。
过去几年我们一直以这种方式保护我们的应用程序,没有遇到任何问题。我们已经通过将一个应用程序添加到允许的受众来根据另一个应用程序的 token 授予对另一个应用程序的访问权限,效果很好。目前,我们在实现新场景时遇到了问题。
问题
我们有两个应用程序:当前应用程序 (cur) 和目标应用程序 (tar)。我们所有的用户都可以登录cur。 cur 的后端根据用户获取的 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 和外部帐户中创建了多个测试帐户,以确保这不是与我们现有用户帐户相关的问题。对 AuthenticationContext
或 ClientCredential
使用不同的配置并不能解决问题。
有什么想法吗?
最佳答案
邀请用户作为访客可以,但如果这不是一个实际的选择,您需要在应用/服务中添加对 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) 中提供的一些示例以获得良好的理解。
您将进行的更改的简短摘要
- 使用较新的 MSAL 库而不是 ADAL。
- 使用scopes instead of resource
- 使用新的 App registration (Preview) portal.
- 更新您的应用注册以支持 AAD 和 MSA 帐户。请参阅 Azure Active Directory app manifest 中的 signInAudience .
关于azure - AAD AcquireToken 返回错误 AADSTS50000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830555/