Хранилище ключей Azure не получает ClientId или ClientSecret из настроек приложения - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать хранилище ключей Azure из моего веб-приложения ASP.NET MVC и следую этим инструкциям .

Мой Web.config выглядит так (как в инструкции):

<!-- ClientId and ClientSecret refer to the web application registration with Azure Active Directory -->
<add key="ClientId" value="clientid" />
<add key="ClientSecret" value="clientsecret" />

<!-- SecretUri is the URI for the secret in Azure Key Vault -->
<add key="SecretUri" value="secreturi" />

И мой метод получения токена доступа выглядит так (так же, как инструкции):

//add these using statements
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Threading.Tasks;
using System.Web.Configuration;

//this is an optional property to hold the secret after it is retrieved
public static string EncryptSecret { get; set; }

//the method that will be provided to the KeyVaultClient
public static async Task<string> GetToken(string authority, string resource, string scope)
{
    var authContext = new AuthenticationContext(authority);
    ClientCredential clientCred = new ClientCredential(WebConfigurationManager.AppSettings["ClientId"],
            WebConfigurationManager.AppSettings["ClientSecret"]);
    AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);

    if (result == null)
        throw new InvalidOperationException("Failed to obtain the JWT token");

    return result.AccessToken;
}

Я поместил свой ClientId, ClientSecret и SecretUri в настройки приложения моего веб-приложения, как показано на скриншоте в инструкциях. Так как я сделал это, я могу ожидать (от инструкции):

Если у вас есть веб-приложение Azure, теперь вы можете добавить фактические значения для наборов приложений на портале Azure. При этом фактические значения не будут находиться в файле web.config, а будут защищены через портал, где у вас есть отдельные возможности контроля доступа. Эти значения будут заменены значениями, введенными вами в файле web.config. Убедитесь, что имена совпадают.

Однако, когда я запускаю описанный выше метод, значение для WebConfigurationManager.AppSettings["ClientId"] разрешается до clientid, которое является фиктивным значением, и аналогично для ClientSecret. Насколько я понимаю, этот метод должен обращаться к веб-приложению на портале Azure и заменять значения. Что мне не хватает? Почему не подставляются значения?


Редактировать: Также может быть важно, чтобы я использовал Azure Active Directory B2C вместо Azure Active Directory.

1 Ответ

0 голосов
/ 07 мая 2018

Когда вы запускаете или отлаживаете приложение из локальной среды, приложение выбирает значения из web.config, и вы видите фиктивные значения на своей веб-странице. Ваше приложение будет выбирать значения из настроек приложения Azure при развертывании приложения в Azure. Кроме того, вам необходимо сохранить имя ключа в файле web.config, а также в настройках приложения Azure. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...