2017-10-13 185 views
1

我正在使用Microsoft.Azure.keyVault嘗試從Azure中的密鑰庫中獲取密鑰。嘗試從Azure密鑰獲取祕密時遇到Unathorized Vault

我已經註冊了一個作爲Native API和Web API的應用程序。

登錄到AD是成功的(可通過在AuthenticationContext.AcquireTokenAsync上獲取有效的AccessToken來確認這一點)。

在Azure AD中,這兩個應用程序在密鑰庫中都有訪問控制(IAM)和訪問策略。我已經證實,重點庫基地址和祕密名字是正確的,但做以下電話

var sec = kv.GetSecretAsync("https://xxxxxxx.vault.azure.net", "xxsecretnamexx").GetAwaiter().GetResult(); 

我不斷收到錯誤時

{"Operation returned an invalid status code 'Unauthorized'"} Microsoft.Azure.KeyVault.Models.KeyVaultErrorException 

一個旁註:試圖通過登錄做到這一點作爲用戶。獲得令牌的代碼如下

.AcquireTokenAsync(resourceUri,clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.SelectAccount)) 

我們已經使用具有權限的密鑰庫中的註冊Azure的AD應用程序的ID和祕密工作的代碼。

試圖在不使用相關注冊的Azure AD應用程序的標識和密碼的情況下執行相同的操作,而是在將訪問令牌獲取到Azure AD時顯示登錄提示。

+0

什麼是'resourceUri'價值? – juunas

回答

1

我用下面的代碼測試它,它在我身邊正常工作。該resourceUri是https://vault.azure.net

static string appId = "application Id"; 
static string tenantId = "tenant id"; 
static string uri = "http://localhost:13526"; //redirect uri 
static void Main(string[] args) 
{ 
    var kv = new KeyVaultClient(GetAccessToken); 
    var scret = kv.GetSecretAsync("https://xxxx.vault.azure.net", "xxxx").GetAwaiter().GetResult(); 
} 

public static async Task<string> GetAccessToken(string azureTenantId,string clientId,string redirectUri) 
{ 
     var context = new AuthenticationContext("https://login.windows.net/" + tenantId); 
     var tokenResult = await context.AcquireTokenAsync("https://vault.azure.net", appId, new Uri(uri), new PlatformParameters(PromptBehavior.SelectAccount)); 
     return tokenResult.AccessToken; 
    } 

以下是我的詳細步驟。

1.Registry的本機應用程序

2.增加KeyVault權限

enter image description here

3.添加上面的代碼並對其進行測試在我的側。

enter image description here

Packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Hyak.Common" version="1.0.2" targetFramework="net461" /> 
    <package id="Microsoft.Azure.Common" version="2.0.4" targetFramework="net461" /> 
    <package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net461" /> 
    <package id="Microsoft.Azure.KeyVault" version="1.0.0" targetFramework="net461" /> 
    <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net461" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net461" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.17.0" targetFramework="net461" /> 
    <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net461" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" /> 
</packages> 
+0

我的應用程序正在工作。我將你的代碼與我的代碼進行了比較,他們非常相似。我真的看不到任何重大差異。今天早上該應用剛剛開始工作。在安全更改完全通過Azure傳播之前,是否有時間滯後? –

+0

在你的情況下,根據我的測試,在通過天藍色安全變化之前沒有任何滯後。 –

相關問題