使用Azure AD承载令牌访问O365 Exchange REST API(邮件,联系人等)

时间:2015-01-13 21:50:29

标签: ruby ms-office office365 azure-active-directory

我正在使用Azure AD在O365中配置和许可新用户并且它工作得很漂亮,但是我还需要一些O365功能(即能够导出用户的联系人)。我注意到您的应用有权限执行此操作:

enter image description here

我可以获得一个持票人令牌来执行类似于此代码的所有其他REST调用(使用httparty在ruby中):

domain = "example.com"
api_version = "1.5"
auth_url = "https://login.windows.net/#{domain}/oauth2/token?api-version=#{api_version}"
auth_body = {"grant_type" => "client_credentials", "client_id" => @client_id, "client_secret" => @client_secret}
auth_headers = {"Content-Type" => "application/x-www-form-urlencoded"}
token_resp = HTTParty.post(auth_url, :headers => auth_headers, :body => auth_body)
bearer_token = "Bearer #{token_resp['access_token']}"

当我尝试在O365 Exchange上拨打电话时,它可以很好地调用https://graph.windows.net/

request_headers={"Authorization" => bearer_token, "Content-Type"=>"application/json"}
request = HTTParty.get("https://outlook.office365.com/api/v1.0/users/user@example.com", :headers => request_headers)

request = HTTParty.get("https://api.office.com/discovery/v1.0/me/services", :headers => request_headers)

我收到以下回复:

  

HTTParty :: Response:0x7fea2f8b0e40 parsed_response = {“error”=> {“code”=>“ - 2147024891,   System.UnauthorizedAccessException“,”message“=>”访问被拒绝。你做   无权执行此操作或访问此操作   资源。“}},@ response =#,@ header = {”cache-control“=> [”private,max-age = 0“],   “传输编码”=> “分块”],   “content-type”=> [“application / json; odata.metadata = minimal; odata.streaming = true; IEEE754Compatible = false; charset = utf-8”],“expires”=> [“星期一,12月29日2014 19:27:04 GMT“],”last-modified“=> [”周二,   2015年1月13日19:27:04 GMT“],”server“=> [”Microsoft-IIS / 8.0“],   “X-的correlationID”=> [ “595d3bd9-94f7-40fe-b4ed-c3a28cc74cdb”],   “X-usersessionid在”=> [ “595d3bd9-94f7-40fe-b4ed-c3a28cc74cdb”],   “X-officefe”=> [ “OdcFrontEnd_IN_10”],   “X-officeversion”=> [ “16.0.3705.3001”],   “x-officecluster”=> [“scus-odc.officeapps.live.com”],“p3p”=> [“CP = \”CAO   DSP COR ADMa DEV CONi TELi CUR PSA PSD TAI IVDi我们的SAMi BUS DEM NAV   STA UNI COM INT PHY ONL FIN PUR \“”],“odata-version”=> [“4.0”],   “x-aspnet-version”=> [“4.0.30319”],“x-powered-by”=> [“ASP.NET”],   “date”=> [“星期二,2015年1月13日19:27:03 GMT”],“连接”=> [“关闭”]}>

我在这里遗漏了什么吗?如何使用应用程序的承载令牌访问Exchange Online API?有没有这方面的文件?我似乎无法找到关于这个主题的任何内容。

2 个答案:

答案 0 :(得分:0)

“拥有对用户邮箱的完全访问权限”需要管理员权限。我建议取消这个许可并再给它一次。

答案 1 :(得分:0)

目前,用户自己需要登录并授予您应用访问Contacts API的权限。我们正在努力发布仅限应用程序的权限(类似于Graph现在的权限)。