Azure Key Vault未从应用程序设置中检索ClientId或ClientSecret

时间:2018-05-01 15:49:00

标签: azure-web-sites azure-ad-b2c azure-keyvault

我正在尝试从我的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可能很重要。

1 个答案:

答案 0 :(得分:1)

当您从本地环境运行或调试应用程序时,应用程序会从web.config中选择值,因此您会在网页上看到虚拟值。将应用程序部署到Azure时,应用程序将从Azure应用程序设置中选择值。此外,您需要在web.config以及Azure应用程序设置中保持密钥名称相同。希望这会有所帮助。