Azure ADAL OutlookServiceClient 无法获取非管理员帐户的数据

Azure ADAL OutlookServiceClient cannnot get data for non-admin account

我正在使用 Azure AD 和 Office 365 API 在我的项目中执行 OAuth。我的问题是我只能授权 admin 帐户(如 "user@project.onmicrosoft.com")并获取数据,但 non-admin regular 帐户(例如, "user@hotmail.com") 不能。

我如何实施 OAuth2

  1. 获取授权码:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id={我的客户端 ID}&redirect_uri={重定向 uri}&resource=https%3A%2F%2Foutlook.office365.com%2F&state={guid}

  1. 获取访问令牌和刷新令牌:
  TokenCache tokenCache = new TokenCache();
  ClientCredential credential = new ClientCredential(clientId, clientSecret);
  AuthenticationContext authContext = new AuthenticationContext(authorityUrl, tokenCache);
  AuthenticationResult authResult = authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), credential, recourceUri);
  string accessToken = authResult.AccessToken;
  string refreshToken = authResult.RefreshToken;
  1. 获取用户数据(例如,日历事件):
  OutlookServicesClient outlookClient = new OutlookServicesClient(new Uri(recourceUri + "/api/v2.0"), async () => { return accessToken; });
  List<Event> microsoftEvents = new List<Event>();
  var events = await outlookClient.Me.Events.Take(10).ExecuteAsync();
  foreach (IEvent calendarEvent in events.CurrentPage)
  {
    Event microsoftEvent = new Event
    {
      Subject = calendarEvent.Subject,
      Body = calendarEvent.Body,
      Location = calendarEvent.Location,
      Start = calendarEvent.Start,
      End = calendarEvent.End
    };
    microsoftEvents.Add(microsoftEvent);
  }

注:

  1. 我不确定是不是Azure AD权限设置导致的,所以暂时授予"Windows Azure Active Directory"和"Office 365 Exchange Online"所有可用权限。
  2. 我没有为这个 Azure AD 付费。我有一个 Office 365 开发人员帐户,并且在 Office 管理中心内有一个 link 到 AAD。不确定是否是这个原因。我需要为额外的 AAD 订阅付费吗?

2016 年 11 月 2 日更新

  1. 之前对账户的误解。 "user@project.onmicrosoft.com" 等帐户是 Office 365 帐户,而不是管理员帐户。 Hotmail 帐户实际上是普通的 Microsoft 帐户。

  2. Jason 提到,Azure v1 端点不支持 Microsoft 帐户授权。这里主要是指向授权码生成。

  3. 必须在新门户 (https://apps.dev.microsoft.com) 中创建 Azure AD 应用程序。否则会报Application not supported问题。

您说您授予了 Exchange 和 Active Directory 的所有权限。其中一些权限需要管理员,这很可能是您的问题。您应该只授予您的应用程序所需的权限。