Партнерский API Microsoft доступ запрещен

#azure-active-directory #azure-web-app-service

#azure-active-directory #azure-web-app-service

Вопрос:

Я хочу использовать Microsoft Partner API для создания направления.

Для проверки подлинности я использовал эту документацию : https://learn.microsoft.com/EN-us/partner/develop/api-authentication#application-only-access и, более конкретно, ОСТАЛЬНАЯ часть (аутентификация только для приложений) (это будет фоновое приложение).

Я сделал все, но у меня отказано в доступе. Сообщение об ошибке довольно общее, это проблема с моей ролью в Azure active Directory?

получить маркер доступа
используйте маркер доступа

Комментарии:

1. Привет, Макс, если все еще есть какие-либо проблемы с получением токена доступа и использованием токена доступа, пожалуйста, дайте мне знать.

2. Есть какие-либо обновления об этой проблеме?

3. Если у вас нет никаких проблем с этим, пожалуйста, отметьте мой ответ как «принятый». В Stack Overflow мы должны пометить ответ как «принятый», если это поможет решить проблему. Тогда больше сообществ захотят помочь вам в будущем, вы также можете получить репутацию.

Ответ №1:

Документ показывает нам, что разрешение API имеет тип «Делегированный«, поэтому мы не можем использовать поток учетных данных клиента для получения токена доступа. Мы должны получить токен по потоку имени пользователя / пароля (показано, как показано на скриншоте ниже).

введите описание изображения здесь

Вы можете скопировать свой токен доступа на эту страницу, расшифровать токен и проверить, содержит ли он "scp": "user_impersonation"

Комментарии:

1. Привет, @hury, я позволяю тебе проверить мой ответ. Я отмечу ваш ответ как принятый после 🙂

Ответ №2:

Добавление прогресса здесь слишком длинно для комментария.

Спасибо за ваш ответ! Я прогрессирую, но все еще имею 401 :

  1. Я получаю токен доступа от https://login.microsoftonline.com /{{TenantId}}/oauth2/токен

ответ: { «token_type»: «Bearer», «scope»: «user_impersonation», «expires_in»: «3599», «ext_expires_in»: «3599», «expires_on»: «1610540194», «not_before»: «1610536294», «resource»: «https://api.partnercenter.microsoft.com «, «access_token»: «…..» }

  1. Я получаю токен доступа от https://api.partnercenter.microsoft.com/generatetoken

ответ :

{ «access_token»: «», «token_type»: «bearer», «expires_in»: 3585 }

Но у меня все еще есть 401 от https://api.partner.microsoft.com/v1.0/engagements/referrals

Комментарии:

1. Не могли бы вы поделиться, как вызвать generatetoken? Параметры и заголовки для этого API.

Ответ №3:

Я сделал это с помощью python. Но не может генерировать токены, которые могут помочь получить данные клиента. Код для получения токена доступа

 url = "https://login.microsoftonline.com/" tanat_id "/oauth2/token"
headers = {
    "Accept": "application/json",
    "return-client-request-id": "true",
    "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
    "Host": "login.microsoftonline.com",
    "Content-Length": "194",
    "Expect": "100-continue"
}
data = {
    'client_id': client_id,
    'resource': 'https://api.partner.microsoft.com',
    'client_secret': client_secret,
    'grant_type': 'client_credentials',
}

res = requests.post(url, headers=headers, data=data)
access_token = json.loads(res.text)["access_token"]
  

Код для создания токена

 url = "https://api.partnercenter.microsoft.com/generatetoken"
headers = {
    "Authorization": "Bearer "   str(access_token),
    "Accept": "application/json",
    "content-type": "application/json;charset=UTF-8"
}
data = {
    'grant_type': 'authorization_code',
}

res = requests.post(url, headers=headers, data={"grant_type":"jwt_token"})
  

Но

 >>> res.text
'{"error":"invalid_grant","error_description":"Invalid token: tokenValidationResult == null - True, tokenValidationResult.Principal == null - True, tokenValidationResult.Principal.Identity == null- True, tokenValidationResult.Principal.Identity.IsAuthenticated - "}'
  

Использование access_token если я пытаюсь получить список клиентов, он возвращает ошибку 401.

 #Customer List

url = "https://api.partnercenter.microsoft.com/v1/customers?size=40"
headers = {
    "Authorization": "Bearer "   str(access_token),
    "Accept": "application/json",
}

res = requests.get(url, headers=headers)
res
<Response [401]>
res.text
""