我正在尝试从我的ASP.NET MVC Web应用程序中使用Azure Key Vault,我正在关注these instructions。
我的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 Web App,现在可以在Azure门户中添加AppSettings的实际值。通过执行此操作,实际值将不在web.config中,而是通过具有单独访问控制功能的Portal进行保护。 这些值将替换您在web.config中输入的值。确保名称相同。
但是,当我运行上面的方法时,WebConfigurationManager.AppSettings["ClientId"]
的值将解析为clientid
,这是虚拟值,同样适用于ClientSecret。我的理解是该方法应该与Azure门户中的Web应用程序联系并替换值。 我错过了什么?为什么不替换值?
修改:此外,我使用Azure Active Directory B2C而不是Azure Active Directory可能很重要。
答案 0 :(得分:1)
当您从本地环境运行或调试应用程序时,应用程序会从web.config中选择值,因此您会在网页上看到虚拟值。将应用程序部署到Azure时,应用程序将从Azure应用程序设置中选择值。此外,您需要在web.config以及Azure应用程序设置中保持密钥名称相同。希望这会有所帮助。