Проверка подлинности Azure REST Api с использованием C # - PullRequest
0 голосов
/ 17 октября 2018

Я бы хотел получить информацию об одной из моих баз данных SQL Azure, используя этот вызов: https://docs.microsoft.com/en-gb/rest/api/sql/manageddatabases/manageddatabases_get

Когда я использую кнопку «Попробуй» и войди в свою учетную запись, она работает отлично, однако яя не могу получить приложение-функцию C # для получения токена аутентификации, чтобы он мог работать в C #.Я потратил 3 дня на это.Я попробовал способ 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;
    }

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я нашел ответ, который сработал для меня (после 3-х дней пробовать разные вещи и пытаться читать статьи об этом в Интернете - это не очень хорошо задокументировано, я не думаю).

Эта ссылкасодержит некоторые шаги PowerShell:

https://msftstack.wordpress.com/2016/01/03/how-to-call-the-azure-resource-manager-rest-api-from-c/

Это шаги, которые я пробовал в 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
0 голосов
/ 18 октября 2018

Когда я использую кнопку Try It и захожу в свою учетную запись, она отлично работает

Когда вы нажимаете Try it, вы используете user credential с username и user_password для аутентификации,И код, который вы предоставили, использует App registered in Azure AD для аутентификации, и он будет хорошо работать со следующими шагами, которые вы выполнили.

1. Как уже говорилось, вам нужно создать Service Principle в Azure Active Directory.Вы можете сослаться на эту статью .

2. Значение входа около TenantId, clientId и clientSecret вы можете сослаться на эту ссылку .

3.Наконец, вы бы получили доступ к базе данных SQL Azure , вам нужно добавить разрешение для вашего приложения Azure AD.Выберите приложение, которое вы зарегистрировали в Azure AD ранее, нажмите Settings и добавьте Require Permission.После adding API access, Grant Permission.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...