我们使用Azure Active Directory保护我们的Azure托管API。这些API由Azure托管的Angular应用程序使用。大部分API均以ASP.NET WebAPI的形式实现,其中一些现在已使用Azure函数实现。
在过去的两年中,我们一直以这种方式保护我们的应用程序,并且没有任何问题。我们已经通过将基于令牌的应用程序添加到允许的访问者中来为其授予对另一个应用程序的访问权限,这很好。当前,在实施新方案时我们遇到了一个问题。
问题
我们有两个应用程序:当前应用程序( cur )和目标应用程序( tar )。我们所有的用户都可以登录 cur 。 cur 的后端根据用户获得的 cur 令牌获得令牌来访问 tar 。这适用于由Azure Active Directory(我们的联合身份验证)或联合的Active Directory支持的用户。用户登录不受Azure Active Directory支持的 (即由Microsoft帐户支持)后,获取 tar 的令牌失败,并带有{ {1}}。
上下文
我们的应用程序托管在与我们的用户和应用程序注册不同的AAD租户中。用户和应用程序注册 在同一AAD租户中。我们认为这不是问题,因为配置 适用于AAD支持的帐户。
我们正在使用AuthenticationContext.AcquireTokenAsync(String, ClientCredential, UserAssertion)通过以下参数获取令牌来访问 tar :
我们看到AAD支持的帐户的原始令牌和Microsoft支持的帐户的原始令牌有一个主要区别:IDP(IdentityProvider)字段不同。对于Microsoft帐户支持的帐户,IDP为AADSTS50000: There was an error issuing a token
。对于AAD支持的帐户,该帐户为live.com
。
我们已经在AAD和外部帐户中创建了多个测试帐户,以确保它与我们现有的用户帐户无关。为https://sts.windows.net/<guid>
或AuthenticationContext
使用不同的配置无法解决问题。
有什么想法吗?
答案 0 :(得分:0)
邀请用户作为访客可以使用,但是如果那不是一个实际的选择,则需要在应用程序/服务中添加对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)上可用的示例,以加深了解。
您要进行的更改的简短摘要