Я добился большого успеха с Microsoft Graph API для доступа к пользователям и т. Д. В Azure Active Directory, однако две вещи, которые по-прежнему требуют EWS и SOAP, - это получение фотографий пользователей и добавление почтового правила в почтовый аккаунт пользователя. Я использую учетные записи служб для всего и выдаю себя за администратора учетной записи, чтобы делать запросы.
После попытки использовать тот же токен доступа, который я использую для API Graph, я получаю сообщение об ошибке: The access token is acquired using an authentication method that is too weak to allow access for this application. Presented auth strength was 1, required is 2
.
Читая вокруг, я понимаю, что, поскольку EWS требует полных привилегий для учетных записей, вы не можете просто передать токен доступа, но вам также нужно «что-то сделать» с сертификатом x509.
В моем зарегистрированном приложении в Azure я скорректировал манифест, включив в него самоподписанный сертификат, чтобы у меня были:
"keyCredentials": [{
"customKeyIdentifier": "lhbl...../w0bjA6l1mQ8=",
"keyId": "774D2C35-2D58-.....-AC34B15472BA",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": "MIIFtTCCA52gAwIB.....mmgufQ2rW5GSjEEXOlO1c7qw=="
}],
Насколько я понимаю, customKeyIdentifier
- это Base64 ключа из команды: echo $(openssl x509 -in cert.pem -fingerprint -noout) | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' | xxd -r -ps | base64
value
- это буквально ключевой контент с удаленными -----BEGIN CERTIFICATE-----
и -----END CERTIFICATE-----
, а также удаленными всеми новыми строками (в противном случае в манифесте json недействителен).
keyId
- это GUID, который я только что сгенерировал на терминале с помощью команды uuidgen
, я не думаю, что он каким-либо образом связан напрямую с сертификатом.
В чем я не уверен, так это то, что мне нужно изменить в моем коде, который будет пытаться выполнить аутентификацию против EWS.
Я начал с библиотеки node-ews, моя конфигурация выглядит так:
var ewsConfig = {
username: userEmail,
token: self.accessToken,
host: 'https://outlook.office365.com/EWS/Exchange.asmx',
auth: 'bearer'
};
var ews = new EWS(ewsConfig);
var ewsFunction = 'UpdateInboxRules';
ews.run(ewsFunction, ewsArgs)
.then(result => {
cb(null, result)
})
.catch(err => {
cb(err);
});
};
self.accessToken
- это тот же токен, который я получаю при доступе к Microsoft Graph API.
Итак, в заключение, мои вопросы:
- Что мне нужно сделать с моим запросом, чтобы я сказал серверу также аутентифицировать сертификат x509, я читал, что мне также может потребоваться преобразовать его в сертификат PKCS12?
- Могу ли я использовать тот же токен доступа, который я успешно использую для доступа к api графика?
- Есть ли где-нибудь фрагмент кода, чтобы Nodejs делал это?
- Может ли
keyId
быть любым идентификатором, который я хочу ему дать?
Ответ, который я получаю, содержит:
{ 'content-length': '0',
server: 'Microsoft-IIS/8.5',
'request-id': '9b0d7a1b-85e6-40f6-9af0-7f65fc6669dc',
'x-calculatedfetarget': 'MM1P123CU001.internal.outlook.com',
'x-backendhttpstatus': '401, 401',
'set-cookie': [Object],
'x-feproxyinfo': 'MM1P123CA0026.GBRP123.PROD.OUTLOOK.COM',
'x-calculatedbetarget': 'MM1P123MB1337.GBRP123.PROD.OUTLOOK.COM',
'x-ms-diagnostics': '2000001;reason="The access token is acquired using an authentication method that is too weak to allow access for this application. Presented auth strength was 1, required is 2.";error_category="invalid_token"',
'x-diaginfo': 'MM1P123MB1337',
'x-beserver': 'MM1P123MB1337',
'x-feserver': 'MM1P123CA0026, VI1PR0701CA0059',
'x-powered-by': 'ASP.NET',
'www-authenticate': 'Bearer client_id="00000002-0000-0ff1-ce00-000000000000", trusted_issuers="00000001-0000-0000-c000-000000000000@*", token_types="app_asserted_user_v1 service_asserted_app_v1", authorization_uri="https://login.windows.net/common/oauth2/authorize", error="invalid_token",Basic Realm="",Basic Realm="",Basic Realm=""',
date: 'Tue, 02 May 2017 18:08:54 GMT',
connection: 'close' } }
Спасибо, очень признателен