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

时间:2017-07-13 23:24:55

标签: c# authentication azure-active-directory adal azure-resource-manager

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

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

所以我反对: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'。

我不知道该怎么做,需要一些帮助。 我很确定几天前这段代码可以使用。

1 个答案:

答案 0 :(得分:0)

  
    

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

  

根据您的代码,您正在使用客户端凭据流来对应用程序标识进行身份验证,因为应用程序进行身份验证意味着不涉及用户。要获得您的要求,您可以使用OAuth 2.0 authorization code flowHere是如何构建使用Azure AD调用Web API的多租户SaaS Web应用程序的代码示例。

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