2017-07-29 69 views
0

我使用下面的代碼,試圖在Azure中的Active Directory編程方式註冊的應用程序:如何使用流暢API創建Azure AD應用程序?

 var application = azure.ActiveDirectoryApplications.Define(applicationName) 
      .WithSignOnUrl(url) 
      .WithIdentifierUrl(url) 
      .WithAvailableToOtherTenants(false) 
      .DefinePasswordCredential(id) 
       .WithPasswordValue(secret) 
       .Attach() 
      .Create(); 

azureMicrosoft.Azure.Management.Fluent.Azure一個實例。

當我運行上述操作來創建Azure Active Directory應用程序時,將引發Microsoft.Azure.Management.Fluent.Azure異常,並顯示消息Operation returned an invalid status code 'Forbidden'。其他Azure資源(如資源組和應用服務)的創建工作得很好。

看着異常的詳細信息,我可以看到的請求作出了以下端點:

https://graph.windows.net/{myTenantId}/applications?api-version=1.6

以下是在響應正文:

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}} 

由於機構說「沒有足夠的權限來完成操作」,它似乎是一個簡單的權限問題,但我已授予Microsoft.Azure.ActiveDirectory API的以下權限(以全局管理員身份登錄時)是正在運行的代碼的應用程序:

  • 訪問目錄作爲登錄用戶
  • 讀寫的目錄數據

難道這些權限還不夠嗎?我錯過了什麼?正如我所說的,使用流暢的API創建其他資源工作得很好。

回答

1

範圍Directory.AccessAsUser.AllDirectory.ReadWrite.All User.Read是在Azure Active Directory中創建應用程序的足夠權限。既然你不提供你如何構建azure情況下,我會提供一個工作代碼示例:

static void Main(string[] args) 
{ 
    var url = "http://adfei.onmicrosoft.com/appFluent"; 
    var id = "abc"; 
    var secret = "secret"; 
    var applicationName = "appFluent"; 
    var credFile = new AzureCredentials(new UserLoginInformation 
    { 
     ClientId = "{appId of native application}", 
     UserName = "{userName}", 
     Password = "{password}" 
    }, 
     "adfei.onmicrosoft.com", AzureEnvironment.AzureGlobalCloud); 
    IAzure azure = Azure.Authenticate(credFile).WithDefaultSubscription(); 
    var application = azure.ActiveDirectoryApplications.Define(applicationName) 
    .WithSignOnUrl(url) 
    .WithIdentifierUrl(url) 
    .WithAvailableToOtherTenants(false) 
    .DefinePasswordCredential(id) 
     .WithPasswordValue(secret) 
     .Attach() 
    .Create(); 

    Console.Read(); 
} 

並請保證範圍包括在訪問令牌,以確保您有此操作的權限。您可以通過Fiddler捕獲請求,以檢查令牌並解碼來自this site的令牌,以檢查訪問令牌中的scp聲明。

+0

非常感謝您在構建您所示的IAzure客戶端時能夠正常工作。以前,我只在應用程序中使用clientId/clientSecret(在Portal中使用手動授予的權限),這也許是問題所在。 – tremolo

相關問題