如何使用Microsoft.Azure.Management.Graph.RBAC.Fluent将应用程序添加到Azure AD

时间:2017-01-30 07:35:01

标签: azure azure-active-directory azure-resource-manager

我正在使用https://www.nuget.org/packages/Microsoft.Azure.Management.Fluent以编程方式在Azure中创建资源。该程序包要求我创建一个Azure AD应用程序,我的控制台应用程序将使用该应用程序对资源管理API进行身份验证。到目前为止一切都很好 - 我创建了AD应用并在我的控制台应用中使用它,“正常”的资源管理工作正常。

现在,我想开始使用https://www.nuget.org/packages/Microsoft.Azure.Management.Graph.RBAC.Fluent包以编程方式创建其他Azure AD应用程序,这是上述包的直接依赖关系。虽然我可以使用包裹,例如为了列出现有的Azure AD应用程序,一旦我尝试使用它创建新的Azure AD应用程序,我就会收到授权问题(401)。我尝试使用我给控制台应用程序使用的AD应用程序的权限,但没有成功。

有没有办法......

  1. 授予Azure AD应用程序创建其他Azure AD应用程序的权限(这是我的首选方式),如果是,则需要哪些权限?
  2. 或将Microsoft.Azure.Management.Fluent软件包与具有创建Azure AD应用程序所需权限的实际“人”用户帐户一起使用?

1 个答案:

答案 0 :(得分:1)

https://www.nuget.org/packages/Microsoft.Azure.Management.Graph.RBAC.Fluent包使用Azure AD Graph创建应用程序。

并且没有我们可以创建应用程序的仅限应用程序权限。作为替代方式,我们可以为该租户授予Windows Azure Active Directory的Directory.AccessAsUser.All权限以及具有全局管理员的登录用户。这是一个授予您参考的特定权限的图: enter image description here

更新

使用资源所有者密码凭据授权的此库是专为本机客户端应用程序设计的。

在这种情况下,您可以注册一个本机客户端应用程序,这是一个没有秘密的公共应用程序。或者,您可以使用HttpClient类执行资源所有者密码凭据授予流程。以下是一段代码供您参考:

HttpClient client = new HttpClient();

string body = String.Format("resource={0}&client_id={1}&client_secret={2}&grant_type=password&username={3}&password={4}", Uri.EscapeDataString("https://graph.windows.net"), "{clientId}", Uri.EscapeDataString("{client_secret}"), Uri.EscapeDataString("{userName}"), Uri.EscapeDataString("{password}"));
StringContent sc = new StringContent(body,Encoding.UTF8, "application/x-www-form-urlencoded");
var resoult= client.PostAsync("https://login.microsoftonline.com/xxx.onmicrosoft.com/oauth2/token", sc).Result.Content.ReadAsStringAsync().Result;          

Console.WriteLine(resoult);

此外,由于资源所有者密码凭据授权流程使用用户的用户名/密码进行身份验证,请确保您信任运行此应用的客户端(请参阅Resource Owner Password Credentials Grant )。