C# 使用C语言进行Azure REST Api身份验证#
我希望能够使用此调用获取有关我的一个Azure SQL数据库的信息: 当我使用“试用”按钮并登录到我的帐户时,它工作得非常好,但是我无法让我的C#function应用程序获得身份验证令牌,以便它可以在C#中工作。我已经花了三天时间在这上面了。我尝试了Keyvault方式,但未能正确设置权限。忘记了Keyvault,我认为最近的密码是通过使用此代码,但我不知道我的应用程序密码是什么: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
// 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数据库添加权限的选项。我错过什么了吗?(因此,我的应用程序身份验证,但当我尝试获取数据库信息时,例如,会出现错误)。