收到更改通知后,如何从其他用户的订阅webhook终结点向Microsoft Graph发出经过身份验证的请求?

时间:2019-04-10 14:52:49

标签: c# microsoft-graph microsoft-graph-sdks

我正在通过Azure AD应用程序(用于组织/学校和个人帐户的设置)使用Azure AD身份验证,并且用户通过网站的标准OpenConnect方案进行了授权。

我还拥有一个Azure Web服务,该服务侦听各种事件(使用同一Client / Secret / Tenant = common)的更改通知,例如联系人和事件。这一切都很好,但是(例如)在创建或更新新联系人时,我需要使用Graph SDK来获取实际联系人并更新辅助数据存储。

现在我使用典型的DelegateAuthenticationProvider,但是访问其他用户的联系人似乎总是存在问题,因为我通常会收到类似“令牌不包含任何权限或无法理解的权限”之类的信息。

var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
    var accessToken = GetAccessToken().Result;

    requestMessage
        .Headers
        .Authorization = new AuthenticationHeaderValue("bearer", accessToken);

    return Task.FromResult(0);
}));

return graphClient;

自从它在Scopes中设置并且用户已接受之后,似乎已创建的此委托访问令牌应该能够获取实际的Contact。

关于直接从服务访问其他用户所需的其他想法吗?

1 个答案:

答案 0 :(得分:0)

您要么需要获得对租户的“应用程序”访问权限,要么请求Delegated offline_access范围。

如果您使用offline_access,则会收到一个名为refresh_token的附加令牌。您将需要为每个用户存储此文件,并在收到通知并需要调用Graph时使用它来获取新的access_token。有关详细说明,请参见文档中的Use the refresh token to get a new access token