2016-11-11 60 views
0

我試圖在Azure的這種方式註冊應用(運行在C#應用程序這個腳本,一些變量與運行文本模板生成,<#=#>是常數則):Azure AD應用程序 - 如何從C#或Powershell設置一些參數?

Import-Module AzureRM.Resources 
Login-AzureRmAccount 
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject "CN=Test" -KeySpec KeyExchange 
$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData()) 
$app = New-AzureRmADApplication -DisplayName "<#= Model.ManageApplicationName #>" -HomePage "https://<#= Model.Domain #>/<#= Model.ManageApplicationName #>" -IdentifierUris "https://<#= Model.Domain #>/<#= Model.ManageApplicationName #>" -AvailableToOtherTenants $true -CertValue $keyValue -EndDate $cert.NotAfter -StartDate $cert.NotBefore 
$app.ApplicationId 
New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId 
Start-Sleep -s 30 
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId.Guid 

這工作不錯,我可以在門戶網站看到應用程序...

然後,我需要獲取訪問令牌,以便在Microsoft.Azure.Management.Resources庫中使用它來管理一些資源。

因此,我需要獲取應用程序密鑰/客戶端密鑰,通過ClientCredentials獲取令牌,是否可以在Powershell或通過API執行此操作?

然後我試着以另一種方式做到這一點。我跟着從文件本教程:https://azure.microsoft.com/en-us/documentation/articles/resource-manager-api-authentication/

我發現這個問題致電https://login.microsoftonline.com/ {租戶ID}/OAuth2用戶/授權的教程,當然有我自己的價值觀:

AADSTS65005:客戶端應用程序已請求訪問資源....此請求失敗,因爲客戶端未在其requiredResourceAccess列表中指定此資源。

  • 當我在門戶網站中設置Windows Azure服務管理API權限時,此問題已得到解決 - 可以通過C#或Powershell完成嗎?

AADSTS50011:沒有爲應用程序註冊回覆地址。

  • 當我設置回覆URL時 - 這可以從C#或Powershell完成嗎?

我很困惑,因爲在文檔中沒有關於這個額外的手動設置。問題是需要使整個過程自動化。所以我需要在AD中創建應用程序並在Portal中沒有任何點擊的情況下獲取訪問令牌。希望這是可能的。

謝謝你的幫助。

回答

0

當我在門戶中設置Windows Azure服務管理API權限時可以修復此問題 - 可以通過C#或Powershell完成嗎?

是的,我們可以使用Azure AD Graph REST將應用程序的OAuth 2.0權限授予該應用程序。爲了做到這一點,我們要求租戶的管理員。我們仍然需要一個已經授予權限的應用程序以登錄用戶的身份訪問該目錄。然後我們可以根據OAuth2.0代碼授權流程向管理員獲取令牌。最後,我們可以更新以下REST請求的應用到的Windows Azure服務管理API分配給應用程序:

Patch: graph.windows.net/adfei.onmicrosoft.com/applications/{objectIdOfApplication}?api-version=1.6 
authorization: bearer {token} 
{ 
      "requiredResourceAccess": [ 
      { 
       "resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013", 
       "resourceAccess": [ 
        { 
         "id": "41094075-9dad-400e-a0bd-54e686782033", 
         "type": "Scope" 
        } 
       ] 
      }, 
      { 
       "resourceAppId": "00000002-0000-0000-c000-000000000000", 
       "resourceAccess": [ 
        { 
         "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6", 
         "type": "Scope" 
        }, 
        { 
         "id": "cba73afc-7f69-4d86-8450-4978e04ecd1a", 
         "type": "Scope" 
        }, 
        { 
         "id": "a42657d6-7f20-40e3-b6f0-cee03008a62a", 
         "type": "Scope" 
        } 
       ] 
      } 
     ] 
} 

resourceAppId 797f4846-ba00-4fd7-ba43-dac1f8f63013是的Windows Azure服務管理API00000002-0000-0000-c000-000000000000是針對Windows Azure Active Directory,這是我之前配置的應用程序。您可以獲取所需出口的應用程序requiredResourceAccess並追加resourceAppId797f4846-ba00-4fd7-ba43-dac1f8f63013

當我設置回覆URL時 - 這可以從C#或Powershell完成嗎?

是的。我們可以在Azure Power Shell 3.0中使用Set-AzureRmADApplication來設置ReplyUrls。您也可以在創建應用程序時指定它(請參閱New-AzureRmADApplication)。

+0

嗯,我可以讓用戶輸入或在最壞的情況下給我他的登錄名和密碼。我仍然需要一些註冊的應用程序?我真的需要以某種方式做到這一點,該用戶只是給我他的信譽,其他一切都是爲他完成的...... – Enemim

+0

是的,你是對的。要使用Azure AD Graph授予權限,我們仍然需要一個已註冊且有權允許我們執行此操作的應用程序。 –

+0

好吧,我明白圖想。任何機會以另一種方式做到這一點,就像一些Powershell腳本一樣?或圖是我如何設置權限的唯一方式? – Enemim

相關問題