我正在尝试构建一个Ruby Daemon服务来访问Office 365 rest API.最近通过OAuth'client_credentials'流程实现了这一点,详见本博客文章:http://blogs.msdn.com/b/exchangedev/archive/2015/01/22/building-demon-or -服务-应用程序-与办公-365-邮件日历和联系人的API-的oauth2客户端-凭据flow.aspx
我正在努力生成有效的访问令牌.令牌端点返回给我一个JWT但是当使用这个令牌时,我收到了一条带有此消息的401:
使用身份验证方法获取访问令牌,该身份验证方法太弱而无法访问此应用程序.提出的auth强度为1,要求为2
我知道client_credentials流程要求您提供X.509证书,不幸的是,博客文章中的所有示例都是针对C#的.
我在请求令牌时使用生成的自签名证书和私钥来执行客户端断言.我按照博客文章中的步骤生成证书并更新清单以使用此证书.
这是红宝石代码供参考:
def request_token
uri = URI.parse("https://login.windows.net/== TENANT-ID ==/oauth2/token?api-version=1.0")
https = Net::HTTP.new(uri.host, uri.port)
req = Net::HTTP::Post.new(uri.request_uri)
req.set_form_data(
:grant_type => 'client_credentials',
:redirect_uri => 'http://spready.dev',
:resource => 'https://outlook.office365.com/',
:client_id => '== Client ID ==',
:client_secret => '== Client secret =='
)
https.use_ssl = true
https.cert = client_cert
https.key = client_key
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
resp = https.start { |cx| cx.request(req) }
@access_token = JSON.parse(resp.body)
end
Run Code Online (Sandbox Code Playgroud)
显然,为了安全起见,我删除了一些信息.即使它是ruby,您也可以看到我正在使用我的证书来验证使用SSL连接的客户端.
以下是有关错误的更多信息:
"x-ms-diagnostics" => "2000010; …Run Code Online (Sandbox Code Playgroud) 目前是否可以使用 Office 365 Rest API 来检索电子邮件的纯文本部分?
从 API 文档中可以看出,'Body' 对象包含可以是Text或HTML的 'ContentType' 字段。https://msdn.microsoft.com/office/office365/APi/complex-types-for-mail-contacts-calendar#ItemBody
然而,每当检索到多部分(HTML + 纯文本)消息时,API 只会返回 HTML 部分,如下所示:
{
"@odata.context": "",
"@odata.id": "",
"Id": "",
"Subject": "Test message",
"BodyPreview": "This is the body",
"Body": {
"ContentType": "HTML",
"Content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body style=\"word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;\">\r\n<div>This is the body</div>\r\n</body>\r\n</html>\r\n"
},
"UniqueBody": {
"ContentType": "HTML",
"Content": "<html><body><div>\r\n<div><font face=\"Calibri,sans-serif\" size=\"2\" color=\"black\"><span style=\"font-size:14px;\">\r\n<div>This is the body</div>\r\n</span></font></div>\r\n</div>\r\n</body></html>"
}, …Run Code Online (Sandbox Code Playgroud)