无法从 c# MVC 应用程序请求 Azure 资源管理器

Can't request Azure Resource Manager from c# MVC application

我正在开发一个 MVC 应用程序,它应该获取有关经过身份验证的用户拥有的所有 Azure 资源的信息。

我在多组织模式下从 Visual Studio 向导执行身份验证部分。

所以我反对:https://login.microsoftonline.com/common

现在我需要从应用程序的控制器获取访问令牌。 我试图从该代码中获取身份验证令牌:

   ClientCredential cc = new ClientCredential(_clientId, _servicePrincipalPassword);

   AuthenticationContext context = new 
   AuthenticationContext("https://login.microsoftonline.com/common");
   var result = await context.AcquireTokenAsync("https://management.azure.com/", cc);
   return result.AccessToken;

我得到了一个令牌,但在使用它时我收到了一个 InvalidAuthenticationToken。 我的令牌缺少以下声明之一:'puid'、'altsecid' 或 'oid'.

我不知道该怎么办,需要一些帮助。 我很确定这段代码几天前就可以工作了。

I am developing an MVC application that should get informations about all Azure Resource an authenticated user have.

根据您的代码,您正在使用客户端凭据流通过应用程序身份进行身份验证,作为应用程序进行身份验证意味着没有用户参与。要实现您的要求,您可以使用 OAuth 2.0 authorization code flow . Here 是一个代码示例,该代码示例如何构建使用 Azure AD 调用 Web API 的多租户 SaaS Web 应用程序。

在代码示例的 Startup.Auth.cs 中,AuthorizationCodeReceived 通知可用于为 ARM rest api 获取令牌。 SecurityTokenValidated 通知包含自定义调用方验证逻辑。