#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 :
- Я получаю токен доступа от 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»: «…..» }
- Я получаю токен доступа от 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
""