Как правильно запросить токен носителя Azure или почему он запрашивает у меня параметр «scope»? - PullRequest
0 голосов
/ 23 октября 2019

Ситуация:

У меня есть приложение WPF, которое должно вызывать функцию http-триггера, которая защищена через Azure Active Directory. При попытке получить токен на предъявителя для дальнейших вызовов я получаю следующий ответ (независимо от того, делаю ли я это с помощью почтальона или кода):

AADSTS90014: отсутствует обязательное поле «область действия»

То, что я сделал:

Я читаю тонну различных статей и сообщений в блогах, объясняющих, как защитить функцию триггера http в Azure AD, и получить токен носителя череззапрос на отдых. Следуя одной из тех статей, которые, по моему мнению, лучше всего соответствуют моим потребностям, я создал полную настройку приложения-функции Azure, функции Azure, конфигурации Azure AD и регистрации приложений.

После этого я просто хотел использовать функцию Azure, отправив токен носителя и некоторые другие параметры, и получить результат, но я застрял в получении токена носителя.

Код (на всякий случай):

var restClient = new RestClient("https://login.microsoftonline.com/{myTenant}/oauth2/v2.0/token");
var restRequest = new RestRequest(Method.POST);
restRequest.AddHeader("content-type", "application/x-www-form-urlencoded");
restRequest.AddParameter("grant_type", "client_credentials", ParameterType.GetOrPost);
restRequest.AddParameter("client_id", "{app id from azure ad app}", ParameterType.GetOrPost);
restRequest.AddParameter("client_secret", "{generated secret}", ParameterType.GetOrPost);
restRequest.AddParameter("ressource", "https://{somefunctionname}.azurewebsites.net", ParameterType.GetOrPost);
var restResponse = restClient.Execute(restRequest);

Параметры тела почтальона (x-www-form-urlencoded):

grant_type = "client_credentials"

client_id = {идентификатор приложения отAzure Ad App}

client_secret = {сгенерированный секрет}

ressource = "https://somefunctionname.azurewebsites.net"

и URL, который я использую для получения токена:

https://login.microsoftonline.com/{myTenant}/oauth2/v2.0/token

Мой вопрос:

Итак, детально рассмотрев ситуацию, у меня есть два основных вопроса:

  1. Почему служба проверки подлинности ожидает параметр «область» в моем случае (что-то не так в моей настройке или в моем запросе на отдых)?
  2. Какое значение области следует отправить в случае, если мне нужно отправить один?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Согласно предоставленной вами информации, я думаю, что вы хотите использовать Azure AD v2.0 для доступа к функции, защищенной Azure AD. Если это так, поскольку вы используете Azure AD v2.0, вам необходимо обновить ресурс до области. И областью видимости должно быть `` `{URI идентификатора приложения} /. Default. Подробнее см. В Поток учетных данных клиента OAuth 2.0 . enter image description here

Что касается получения токена доступа, пожалуйста, обратитесь к следующим шагам.

  1. Регистрация клиента для доступа к веб-API

    а. Зарегистрируйте новое приложение Azure AD

    enter image description here enter image description here

    b. настроить права доступа enter image description here

    c. Создать новый секрет enter image description here

    d. получить идентификатор приложения URL enter image description here

  2. Код

 var client = new RestClient("https://login.microsoftonline.com/<your tenant>/oauth2/v2.0/token");
            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddParameter("grant_type", "client_credentials", ParameterType.GetOrPost);
            request.AddParameter("client_id", "your app id", ParameterType.GetOrPost);
            request.AddParameter("client_secret", "your app secret", ParameterType.GetOrPost);
            request.AddParameter("scope", "<your app id url>/.default", ParameterType.GetOrPost);
            IRestResponse response = client.Execute(request);

Результат: enter image description here enter image description here

0 голосов
/ 24 октября 2019

Как и в предыдущем ответе, упомянутом для Azure AD v2, вы получаете не токен, а ресурс. Либо измените свои права доступа на https://login.microsoftonline.com/{myTenant}/oauth2/token, затем вы можете использовать конечную точку v1 и получить токен для своего ресурса

, в противном случае вы либо используете область по умолчанию, как указано в ответе выше, либо вы можете перейти кна портале Azure, перейдите на страницу регистрации приложения и перейдите к разделу Expose a API, а затем проверьте, существует ли какая-либо область, которую вы можете использовать, если не создаете ее

Также убедитесь, что https://{somefunctionname}.azurewebsites.net является вашим приложениемидентификатор URI

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