c# - 配置了一个应用程序时,没有为应用程序注册回复地址

标签 c# wpf azure-active-directory azure-keyvault

我正在制作一个 WPF 应用程序,它必须从 Azure Key Vault 获取一个 key ,但我总是出现这个错误:

AADSTS500113: No reply address is registered for the application.



这是我使用的代码:
public class KeyProvider
{
    public string BaseUrl => "https://my-key-vault.vault.azure.net";
    public Uri RedirectUri => new Uri("urn:ietf:wg:oauth:2.0:oob");
    public KeyVaultClient KeyVaultClient { get; private set; }

    public KeyProvider()
    {
        KeyVaultClient = new KeyVaultClient(GetAccessToken);
    }

    public async Task<string> GetSecretAsync(string key)
    {
        SecretBundle secret = await KeyVaultClient.GetSecretAsync(BaseUrl, key);
        return secret.Value;
    }

    private async Task<string> GetAccessToken(string azureTenantId, string clientId, string redirectUri)
    {
        AuthenticationContext context = new AuthenticationContext(azureTenantId);
        AuthenticationResult tokenResult = await context.AcquireTokenAsync("https://vault.azure.net", clientId, RedirectUri, new PlatformParameters(PromptBehavior.RefreshSession));

        return tokenResult.AccessToken;
    }
}

当我调试时 GetAccessToken ,我看到了 redirectUri (方法的参数)是一个空字符串。

这是我在 Azure 门户中的配置。



我错过了什么吗?

最佳答案

在您的代码中,重定向 uri 是 http。但是在您的应用程序中,它是 https。请尝试将它们设置为相同的。

更新:

权限:

enter image description here

平台:

enter image description here

在 Key Vault 中为用户添加访问策略。

enter image description here

代码:

class Program
{
    public static string clientId = "d4c9b2ed-****-****-****-30a787f7c928";
    public static string redirectUri = "https://localhost/";
    public static string baseUrl = "https://jackkv.vault.azure.net/";

    public static async Task<string> AuthenticationCallback(string authority, string resource, string scope)
    {
        var result = await new AuthenticationContext(authority).AcquireTokenAsync(resource, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.RefreshSession));
        return result.AccessToken;
    }


    static void Main(string[] args)
    {

        Console.ReadLine();

        KeyVaultClient kvc = new KeyVaultClient(AuthenticationCallback);
        var secret = kvc.GetSecretAsync(baseUrl, "testSecret").Result;

        Console.WriteLine(secret.Value);

        Console.ReadLine();
    }
}

结果:

enter image description here

关于c# - 配置了一个应用程序时,没有为应用程序注册回复地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57089390/

相关文章:

c# - Bool list 检查列表中的每一项是否为假

c# - await 运算符只能在异步方法中使用 - 但方法是异步的

c# - 无论属性值如何,WPF 动画都会触发

asp.net-core - 在 Identityserver4 .NET Core 中启用多个 AzureAd

azure - 连接-AzureAD : parsing_wstrust_response_failed: Parsing WS-Trust response failed

c# - 获取 Sharepoint Online 用户

c# - 如何在Windows中使用C#更改扬声器配置?

wpf - 从数据模板内部绑定(bind)到 View 模型

wpf - 初学者-对WPF中的绑定(bind)和资源感到困惑

azure - ARM API 支持应用程序权限吗?