调用Office 365的日历api时获得401未经授权

时间:2018-07-19 18:18:34

标签: json api azure outlook office365

我正在尝试访问Office 365日历api以创建事件。我遵循的步骤是

  1. 创建了应用程序并将其注册为天蓝色
  2. 对应用程序产生误解
  3. 命中https://login.microsoftonline.com/{{tenantid}}/oauth2/token以获取访问令牌

body:

{
 "grant_type":"client_credentials",
 "client_id": "*****",
 "client_secret": "****",
 "resource":"https://outlook.office.com"
}

响应:

{
    "token_type": "Bearer",
    "expires_in": "3600",
    "ext_expires_in": "262800",
    "expires_on": "1532026206",
    "not_before": "1532022306",
    "resource": "https://outlook.office.com",
    "access_token":"******"
}

当我将此访问令牌传递给创建事件的https://outlook.office.com/api/v2.0/me/events时。它给了我401未经授权。请求的主体如下所示。请有人帮忙。

{
  "Subject": "Discuss the Calendar REST API",
  "Body": {
    "ContentType": "HTML",
    "Content": "I think it will meet our requirements!"
  },
  "Start": {
      "DateTime": "2019-02-02T18:00:00",
      "TimeZone": "Pacific Standard Time"
  },
  "End": {
      "DateTime": "2019-02-02T19:00:00",
      "TimeZone": "Pacific Standard Time"
  },
  "Attendees": [
    {
      "EmailAddress": {
        "Address": "arulvelug@hexabot.onmicrosoft.com",
        "Name": "Arulvelu G"
      },
      "Type": "Required"
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

要对Office 365进行授权并通过Postman使用REST API,请参考以下解决方案:

首先:获取安全令牌

通过Http Post方法访问[https://login.microsoftonline.com/extSTS.srf]。 http请求的内容如下。

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"  
  xmlns:a="http://www.w3.org/2005/08/addressing"  
  xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- 
utility-1.0.xsd">  
<s:Header>  
<a:Action 
s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action>  
<a:ReplyTo>  
  <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>  
</a:ReplyTo>  
<a:To s:mustUnderstand="1">https://login.microsoftonline.com/extSTS.srf</a:To>  
<o:Security s:mustUnderstand="1"  
   xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">  
<o:UsernameToken>  
    <o:Username>[username]</o:Username>  
    <o:Password>[password]</o:Password>  
</o:UsernameToken>  
</o:Security>  
</s:Header>  
<s:Body>  
<t:RequestSecurityToken xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">  
  <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">  
    <a:EndpointReference>  
    <a:Address>[endpoint]</a:Address>  
</a:EndpointReference>  
</wsp:AppliesTo>  
<t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType>  
<t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType>  
<t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType>  
</t:RequestSecurityToken>  
</s:Body>  
</s:Envelope>  

邮递员中的演示屏幕截图:

enter image description here

并且响应内容将包括一个安全令牌,如下所示,我们可以使用此安全令牌来获取Office 365的访问令牌。

enter image description here

第二:获取访问令牌

在这里,我向您展示如何获取访问令牌,我是使用安全令牌从SharePoint中获取访问令牌的。

通过http Post方法访问[https://yourdomain.sharepoint.com/_forms/default.aspx?wa=wsignin1.0]。请求的内容是我们上面获得的安全性令牌,如下所示。

enter image description here

响应如下:

enter image description here

我们可以看到响应头中有两个cookie,rtFa和FedAuth,并且这两个cookie需要在后续请求中添加到请求中。

第三:获取请求摘要

通过http Post方法使用上面获得的两个cookie访问[https://yourdomain.sharepoint.com/_api/contextinfo]

enter image description here

响应如下:

enter image description here

这是我们想要的最终代币!

然后我们可以在O365中使用我们的应用程序的REST API,例如SharePoint,我们只需要添加此令牌和前两个cookie,如下图所示。

enter image description here