Я пытаюсь использовать хранилище ключей 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.