C# 使用C语言进行Azure REST Api身份验证#

C# 使用C语言进行Azure REST Api身份验证#,c#,rest,api,azure,C#,Rest,Api,Azure,我希望能够使用此调用获取有关我的一个Azure SQL数据库的信息: 当我使用“试用”按钮并登录到我的帐户时,它工作得非常好,但是我无法让我的C#function应用程序获得身份验证令牌,以便它可以在C#中工作。我已经花了三天时间在这上面了。我尝试了Keyvault方式,但未能正确设置权限。忘记了Keyvault,我认为最近的密码是通过使用此代码,但我不知道我的应用程序密码是什么: // I am using: // tenant id is the Azure AD clien

我希望能够使用此调用获取有关我的一个Azure SQL数据库的信息:

当我使用“试用”按钮并登录到我的帐户时,它工作得非常好,但是我无法让我的C#function应用程序获得身份验证令牌,以便它可以在C#中工作。我已经花了三天时间在这上面了。我尝试了Keyvault方式,但未能正确设置权限。忘记了Keyvault,我认为最近的密码是通过使用此代码,但我不知道我的应用程序密码是什么:

    // I am using:
    // tenant id is the Azure AD client id
    // client id is the application id of my function app in Azure AD
    public static string GetAccessToken(string tenantId, string clientId, string clientSecret)
    {
        var authContextUrl = "https://login.windows.net/" + tenantId;
        var authenticationContext = new AuthenticationContext(authContextUrl);
        var credential = new ClientCredential(clientId, clientSecret );
        var result = authenticationContext.AcquireTokenAsync(resource: "https://management.azure.com/", clientCredential: credential).Result;

        if (result == null)
        {
            throw new InvalidOperationException("Failed to obtain the JWT token");
        }

        var token = result.AccessToken;
        return token;
    }
当我使用“试用”按钮并登录到我的帐户时,它可以完美地工作

当您单击
试用时
,您将使用带有用户名和用户密码的
用户凭证
进行身份验证。您提供的代码正在使用Azure AD中注册的
应用程序进行身份验证,它将与您遵循的以下步骤配合使用

1.正如silent所说,您需要在Azure Active Directory中创建一个
服务原则。你可以参考这个

2.关于
TenantId
clientId
clientSecret
的登录值,您可以参考此

3.最后,您将访问Azure SQL数据库,您需要向Azure AD应用程序添加权限。单击之前在Azure AD中注册的应用,然后单击
设置
,然后添加
要求权限
添加API访问
后,
授予权限

我找到了一个对我有用的答案(在尝试了3天不同的东西并试图在网上阅读有关它的文章之后——我认为没有很好的文档记录)

此链接包含一些powershell步骤:

这些是我在PowerShell中尝试的步骤

Login-AzureRmAccount
Get-AzureRmSubscription
Select-AzureRmSubscription –SubscriptionID “id” 
$SecurePassword=ConvertTo-SecureString <my password> –asplaintext –force
$azureAdApplication = New-AzureRmADApplication -DisplayName “my ARM App” -HomePage 
“https://<a home page>” -IdentifierUris “https://<a home page>” -Password $SecurePassword
New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId
Get-AzureRmSubscription
$subscription = Get-AzureRmSubscription –SubscriptionId "id"
$creds=get-credential
(enter application id and password at this point)
Login-AzureRmAccount -Credential $creds -ServicePrincipal -Tenant $subscription.TenantId
登录AzureRmAccount
获取AzureRmSubscription
选择AzureRmSubscription–SubscriptionID“id”
$SecurePassword=converttosecurestring–asplaintext–force
$azureAdApplication=新AzureDapplication-显示名称“我的ARM应用程序”-主页
“https://”-IdentifierURI“https://”-密码$SecurePassword
新AzureRmADServicePrincipal-ApplicationId$AzureAdaApplication.ApplicationId
新AzureRmRoleAssignment-RoleDefinitionName贡献者-ServicePrincipalName$AzureAdaApplication.ApplicationId
获取AzureRmSubscription
$subscription=获取AzureRmSubscription–SubscriptionId“id”
$creds=获取凭证
(此时输入应用程序id和密码)
登录AzureRmAccount-凭证$creds-服务主体-租户$subscription.TenantId

使用您的方法,您需要创建一个服务原则。然后您需要授予SP对Azure资源的所需权限:实际上,租户ID是Azure AD directoryId。clientId是applicationId,clientSecret是在Azure Ad应用程序注册中设置的密钥。你可以参考这个,谢谢。我已经尝试了您所说的一切,但我没有为Azure SQL数据库添加权限的选项。我错过什么了吗?(因此,我的应用程序身份验证,但当我尝试获取数据库信息时,例如,会出现错误)。