首页 > 解决方案 > 从 C# 应用程序访问应用程序失败

问题描述

我在 Azure Portal -> App Registration 下注册了一个小应用程序。我正在尝试使用密钥访问。

var context = new AuthenticationContext("https://login.windows.net/" + MyConstants.tenantID);
ClientCredential cc = new ClientCredential(MyConstants.applicationId, MyConstants.authenticationKey);
AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
client = new DataFactoryManagementClient(cred)
{
    SubscriptionId = MyConstants.subscriptionId
};

我如何获得authenticationKey

我尝试使用客户端 Secret 但它不起作用

var context = new AuthenticationContext("https://login.windows.net/" + MyConstants.tenantID);
ClientCredential cc = new ClientCredential(MyConstants.applicationId, MyConstants.authenticationKey);
AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
client = new DataFactoryManagementClient(cred)
{
    SubscriptionId = MyConstants.subscriptionId
};

“Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException:AADSTS700016:在目录“e2454f92-2891-4670-9402-f17f4cef17de”中找不到标识符为“270d74fc-4085-43ff-ab1e-e2dba48461e0”的应用程序。如果应用程序尚未被租户管理员安装或租户中的任何用户同意。您可能将身份验证请求发送给了错误的租户。

跟踪 ID:cee6d534-7d75-4fcb-a5e9-0d93ab88af00\r\n相关 ID:3b74b95e-a33a-410d-9e4e-82eef4a81817 时间戳:2019-11-11 10:51:43Z ---> Microsoft.IdentityModel.Clients.ActiveDirectory .AdalServiceException:响应状态码不表示成功:400(BadRequest)

标签: c#azure

解决方案


根据您提供的错误,您使用的应用程序id在租户中不存在或者您没有完成管理内容。如果您想使用客户端凭证流来获取访问令牌并调用 API,请参考文档。详细步骤如下。1.注册一个Azure AD应用 在此处输入图像描述

  1. 将 RABC 角色分配给应用程序。因为要创建 Azure 数据工厂,所以可以Data Factory Contributor role为应用程序分配角色。更多详细信息,请参阅文档

    一个。单击要授予访问权限的订阅。

    湾。单击访问控制 (IAM)。

    C。单击角色分配选项卡以查看此订阅的所有角色分配。

    d。单击添加 > 添加角色分配以打开添加角色分配窗格。 在此处输入图像描述 在此处输入图像描述

  2. 代码

string tenantID = "<your tenant ID>";
string applicationId = "<your application ID>";
string authenticationKey = "<your client secret for the application>";
string subscriptionId = "<your subscription ID where the data factory resides>";
var context = new AuthenticationContext("https://login.windows.net/" + tenantID);
ClientCredential cc = new ClientCredential(applicationId, authenticationKey);
AuthenticationResult result = context.AcquireTokenAsync(
    "https://management.azure.com/", cc).Result;
ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
var client = new DataFactoryManagementClient(cred) {
    SubscriptionId = subscriptionId };

推荐阅读