Доступ к хранилищу ключей Azure из собственного приложения - PullRequest
0 голосов
/ 02 июля 2018

У меня есть приложение .Net, опубликованное в службе веб-приложений Azure (собственное приложение). и я хочу получить оттуда доступ к своему хранилищу ключей Azure. Я уже пробовал это: Доступ к хранилищу ключей из собственного приложения

, но он работает только при локальном запуске приложения и не работает при запуске в службе веб-приложений Azure. Я получаю эту ошибку:

Ошибка HRESULT E_FAIL была возвращена после вызова COM-компонента.

И это бросается в этом методе:

await context.AcquireTokenAsync("https://vault.azure.net", 
                                ClientId, 
                                new Uri(ClientRedirectURI), 
                                new PlatformParameters(PromptBehavior.Auto));

Есть ли другой способ получить доступ к моему хранилищу ключей из собственного приложения?
Учебные пособия, такие как «Доступ к хранилищу ключей из веб-приложения», не работают, поскольку у меня нет ClientSecretID.

Спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

Ошибка HRESULT E_FAIL была возвращена после вызова COM-компонента

В вашем случае необходимо запросить интерфейс для ввода имени пользователя и пароля, чтобы получить кредит.

Но WebApp - это песочница . Песочница препятствует доступу ко всем COM-серверам вне процесса.

Как отметил rickvdbosch, вы можете зарегистрировать Azure AD WebApp, чтобы получить clientId и secretkey. Более подробную информацию можно найти в этом общем количестве . Ниже приведен демонстрационный код доступа к keyvault.

  public static async Task<string> GetAccessToken(string tenantId,string appId,string secretKey)
    {

        var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
        ClientCredential clientCredential = new ClientCredential(appId, secretKey);
        var tokenResponse =await context.AcquireTokenAsync("https://vault.azure.net", clientCredential); //KeyVault resource : https://vault.azure.net
        var accessToken = tokenResponse.AccessToken;
        return accessToken;
    }

    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));

Мы также можем использовать для этого функцию Azure Web MSI . Вы также можете узнать, как получить доступ к коду keyvault из этого общего числа

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...