我正在通过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。
关于直接从服务访问其他用户所需的其他想法吗?
答案 0 :(得分:0)
您要么需要获得对租户的“应用程序”访问权限,要么请求Delegated offline_access
范围。
如果您使用offline_access
,则会收到一个名为refresh_token
的附加令牌。您将需要为每个用户存储此文件,并在收到通知并需要调用Graph时使用它来获取新的access_token
。有关详细说明,请参见文档中的Use the refresh token to get a new access token。