获取Azure Active Directory令牌

时间:2018-10-20 10:01:59

标签: c# azure azure-active-directory

我有一个Azure帐户,现在我正试图在控制台应用程序中获取令牌以管理资源(即创建资源组等):

string userName = "xyz@gmail.com";
string password = "XXXXXXXXX";
string directoryName = "xyzgmail.onmicrosoft.com";
string clientId = "guid-of-registered-application-xxx";
var credentials = new UserPasswordCredential(userName, password);
var authenticationContext = new AuthenticationContext("https://login.windows.net/" + directoryName);
var result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", clientId, credentials);

在我有 AcquireTokenAsync 通话中

  

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException:   'accessing_ws_metadata_exchange_failed:正在访问WS元数据交换   失败了

有人可以帮忙吗?

更新:我如何尝试在新创建的用户下创建资源组

var jwtToken = result.AccessToken;
string subscriptionId = "XX-XX-XX-YY-YY-YY";
var tokenCredentials = new TokenCredentials(jwtToken);
var client = new ResourceManagementClient(tokenCredentials);
client.SubscriptionId = subscriptionId;
var rgResponse =  await client.ResourceGroups.CreateOrUpdateWithHttpMessagesAsync("myresgroup77777",
                new ResourceGroup("East US"));

这里我还有另一个例外

  

“具有对象ID的客户端'newaduser@xyzgmail.onmicrosoft.com”   'aaa-aaa-aaa-aaa'无权执行操作   范围上的“ Microsoft.Resources / subscriptions / resourcegroups / write”   '/ subscriptions / XX-XX-XX-YY-YY-YY / resourcegroups / myresgroup77777'。'

1 个答案:

答案 0 :(得分:0)

不确定为什么会出现第一个错误,但是第二个错误是因为已登录的用户没有执行操作的权限(如错误消息中所述)。

当您分配执行Windows Azure Service Management API的权限时,它实际上已分配给采用已登录用户身份的应用程序。

为了在Azure订阅中执行Create Resource Group操作,该用户必须具有允许执行此操作的角色。您可以通过在Azure订阅级别为该用户分配内置Contributor角色来尝试。

此外,关于使用login.windows.net v / s login.microsoftonline.com,建议您使用后者。使用login.windows.net时,它会自动重定向到login.microsoftonline.com。使用login.microsoftonline.com将为您节省一个重定向。