我正在嘗試對Office365使用Exchange Web Services(EWS)進行OAuth身份驗證。這是在成功地將OAuth2與新的RESTful圖形API一起使用之後,但發現圖形API並沒有做我需要用機密客戶端「僅應用程序」流程所做的事情(這將被守護進程使用,所以沒有用戶交互)。我發現(我希望!)EWS SOAP與保密客戶端OAuth授權頭的交易必須具有使用X.509證書創建的承載訪問令牌,而不僅僅是client_id/client_secret您可以使用RESTful Graph API。否則,EWS SOAP失敗的401未經授權HTTP返回,和一個額外的非標頭被稱爲X-MS-診斷與價值:Azure應用程序清單中的「encryptedSecretValue」參數應該是什麼?
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"
不幸的是,Azure管理門戶網站不具備管理這些一個UI證書,所以你必須下載,編輯,然後上載應用程序的清單(一個JSON文件)。
我創建了一個自簽名的2048位X.509證書(使用openssl生成名爲cert.pem的PEM文件和名爲key.pem的文件中的密鑰),然後從cert.pem生成base64編碼指紋使用:
echo $(openssl x509 -in cert.pem -fingerprint -noout) | sed 's/SHA1 Fingerprint=//g' | sed 's/://g' | xxd -r -ps | base64
我遵循的this document步驟2的說明,嘗試把證書導入清單(除了已有的圖形API的client_id/client_secret設置,我仍然想使用更好/更現代的RESTful圖API儘可能在應用程序中)。要做到這一點,我添加了一個新的數組數據結構到passwordCredentials數組中的JSON文件:
{
"customKeyIdentifier": "<base64EncodedFingerprintFromAbove>",
"keyId": "<guid>",
"endDate": "2018-11-24T09:12:01.397205Z",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": "MIIDvTCC (lots of certificate) cskQ=="
}
然而,當我現在嘗試使用Azure的管理門戶上傳編輯的清單,我得到的錯誤:
ParameterValidationException=Invalid parameters provided; BadRequestException=Encrypted secret cannot be empty and can be at most 1024 bytes. Parameter name: encryptedSecretValue;
沒有在我的清單JSON文件名爲encryptedSecretValue參數,我無法找到通過Google on what this error means或what should go in this parameter什麼。
所以我的問題是:什麼應該進入應用清單JSON文件,以允許證書用於獲取用EWS SOAP查詢進行OAuth授權的機密客戶端訪問令牌?我吠叫錯了樹嗎?另外,假設我可以使用SOAP來處理這個問題,我可以使用RESTful Graph API調用以及EWS SOAP調用(即在同一守護程序中混合使用Graph和EWS)的訪問令牌嗎?
這對我前進很有幫助 - 謝謝。 –