Как войти на портал Azure с помощью API REST - PullRequest
0 голосов
/ 13 ноября 2018

Я планирую реализовать приложение C #, которое будет создавать ресурсы Azure с использованием API REST (вызовы API для Azure Resource Manager).При вызове API REST вы должны пройти аутентификацию, передав заголовок аутентификации «Authorization: Bearer yJ0eXAiOiJKV ...».

Как получить этот токен на предъявителя?Просматривая в Интернете все, что я нашел, имеет веб-приложение, вы используете его application_id.Однако у меня нет приложения, и я не хочу его создавать.

Я могу повторить вызовы, которые я перехватываю с помощью Fiddler, но я думаю, что это не «рекомендуемый» способ.

Кто-нибудь сталкивался с этой проблемой и имеет решение?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Краткий ответ : если вы разрабатываете приложение на C #, которое будет использовать API-интерфейсы REST Azure, то для получения токена-носителя для проверки подлинности вам необходимо пройти регистрацию приложения Azure AD (это невозможно, так как вам необходимо иметь возможность аутентификации, используя любой из поддерживаемых потоков грантов OAuth 2.0).


Есть несколько способов сделать вещи более удобными для вас:

  • Использование интерфейса командной строки для создания субъекта службы для RBAC

    На портале Azure откройте интерфейс командной строки, щелкнув выделенный значок.enter image description here

    Теперь запустите приведенную ниже команду

    az ad sp create-for-rbac -n "MyTestSPForAzureRESTAPIs"
    

    Это выполняет несколько действий для вас в одной команде и предоставляет отличный способ начать тестированиеREST API.

    Созданный участник службы добавляется в подписчик Azure как «участник».Вы всегда можете перейти в «Подписки»> «Ваша подписка»> «Контроль доступа» (IAM) и изменить его в соответствии со своими требованиями.

    Вы получаете идентификатор приложения, а также пароль / секретный ключ клиента, который затем можно использовать в коде C # дляполучить токен на предъявителя.

    Пример вывода enter image description here

    ПРИМЕЧАНИЕ : так как этот подход дает вам секрет клиента, вы должны использовать его только изсерверные приложения (например, веб-API, веб-приложение или служба Daemon).НЕ используйте клиентские секреты из настольного приложения (например, консольного приложения или приложения WPF) или SPA в производственном сценарии.

    Я говорю это потому, что настольные приложения или SPA недостаточно безопасны для обработки клиентских секретов, и для них рекомендуются другие различные процессы аутентификации.Если это ваш случай, посмотрите на делегированные разрешения в приложении Azure AD, где вы можете запросить учетные данные у конечного пользователя.Просто прокомментируйте ответ, и я могу добавить более конкретные рекомендации по ним.

  • Использовать управляемую идентификацию в случае службы приложений или функции Azure

    Если вы планируете разместить упомянутое вами приложение C # с помощью службы приложений или в качестве функции Azure, то вы можете использовать MSI.Даже в этом случае приложение будет создано в Azure AD, но вам не нужно делать это или управлять ключами (регулярно их менять и т. Д.).Это отличный вариант, настоятельно рекомендуется, если он подходит для вашего сценария.

    Подробнее читайте здесь: Как использовать управляемые удостоверения для службы приложений и функций Azure

0 голосов
/ 13 ноября 2018

Если вы просто хотите получить токен на предъявителя.Я рекомендую вам войти в свою учетную запись в документе Azure API .После входа в систему мы можем получить токен на предъявителя.

enter image description here

enter image description here

Если мы хотимЧтобы использовать код для получения токена доступа для доступа или изменения ресурсов, создайте удостоверение для приложения Azure AD: требуется .Эта личность называется принципалом службы.Затем мы можем назначить необходимые разрешения субъекту службы.

Как зарегистрировать приложение Azure AD и назначить роль приложению, см. Этот документ .

* 1024.* Ниже приведен демонстрационный код получения токена доступа с помощью applicationId и ключа sercet
public static async Task<string> GetAccessToken(string tenantId, string clientId, string clientSecretKey)
    {

        var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
        ClientCredential clientCredential = new ClientCredential(clientId, clientSecretKey);
        var tokenResponse = await context.AcquireTokenAsync("https://management.azure.com/", clientCredential);
        var accessToken = tokenResponse.AccessToken;
        return accessToken;
    }
...