Microsoft Graph-无法读取/写入其他用户的日历

时间:2018-07-11 09:30:09

标签: outlook office365 microsoft-graph outlook-restapi outlook-calendar

我有一个在Azure上注册的Web应用程序,目的是能够读取和写入其他用户的日历。为此,我在Azure上为此应用设置了these permissions

但是,例如,当我尝试为给定用户创建新事件时,会收到错误消息。这是我正在使用的:

端点

root.widthProperty().addListener((o, oldValue, newValue) -> {
    double maxWidth = tp.getChildren()
                        .stream()
                        .filter(n -> n instanceof Region)
                        .map(n -> ((Region) n).getWidth())
                        .max(Double::compareTo)
                        .orElse(0d);

    tp.setPrefColumns(Math.min(tp.getChildren().size(),
            Math.max(1, (int) (newValue.doubleValue() / maxWidth))));
});

Stream.iterate(0, i -> i + 1).limit(5).forEach(i -> {
    Region r = new Region();
    Random random = new Random();
    r.setPrefSize(random.nextInt(150) + 50, random.nextInt(150) + 50);
    System.out.println(r.getPrefWidth());
    System.out.println(r.getPrefHeight());
    r.setStyle("-fx-background-color: red; -fx-border-color: blue; -fx-border-width: 1;");

    tp.getChildren().add(r);
});

HTTP标头

<!DOCTYPE html>
<html>
<head>
<style> 
.triangle-container{
        transform: rotate(-90deg); 
  }
   .triangle{
    fill: white;
    stroke: white;
    stroke-width: 1;
    filter: drop-shadow(-10px 5px 5px rgba(204,204,204,0.1));
    }
</style>
</head>
<body>
<div class="triangle-container">
	  <svg height="500" width="500">
		    <polygon points="250,100 100,400 400,400" class="triangle" />
		    Sorry, your browser does not support inline SVG.
	  </svg>
</div>
</body>
</html>

请求正文

https://graph.microsoft.com/v1.0/users/${requester}/calendar/events

错误消息

Content-Type    application/json

有什么我想念的吗?预先感谢您的帮助!


解决方案更新

我设法按照此链接中描述的步骤解决了该问题: https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

1 个答案:

答案 0 :(得分:1)

从屏幕截图中可以看出您使用了应用程序许可(尽管很高兴在您的问题中包含此信息):

enter image description here

根据您所授予的权限类型,您需要使用适当的流程来获取访问令牌(on behalf of a useras a service。对于应用程序权限,您必须使用流程进行服务,而不是代表用户。

您还可以使用jwt.io检查令牌,并确保其有效载荷包含适当的角色。如果没有,很可能是您使用了不正确的流程。

关于它的到期时间,您可能已经找到有关刷新令牌(for example here)的信息。请记住,它仅适用于代表用户授予的权限。对于没有用户的访问,您应该确保知道令牌的到期时间并相应地请求新的令牌。