【问题标题】:Azure ADAL OutlookServiceClient cannnot get data for non-admin accountAzure ADAL OutlookServiceClient 无法获取非管理员帐户的数据
【发布时间】:2017-03-13 13:55:20
【问题描述】:

我正在使用 Azure AD 和 Office 365 API 在我的项目中执行 OAuth。我的问题是我只能拥有 admin 帐户(如“user@project.onmicrosoft.com”)并获取数据,但 非管理员常规 帐户(如“ user@hotmail.com") 不能。

我如何实现 OAuth2

  1. 获取授权码:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id={my client Id}&redirect_uri={redirect 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 管理中心内有一个指向 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 issue。

【问题讨论】:

    标签: azure oauth-2.0 azure-active-directory adal office365api


    【解决方案1】:

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

    【讨论】:

    • 嗨,杰森,感谢您回复我。我删除了一些权限,现在“Windows Azure Active Directory”具有应用程序权限“读取目录数据”和委派权限“以登录用户身份访问目录”。 “Office 365 Exchange Online”具有“在所有邮箱中读取和写入日历”的应用程序权限以及对日历的委派权限。我的目的是获取用户的事件。现在它报告错误 - “用户是组织中的'guest'类型,但尝试作为该组织的普通用户访问。”;error_category="invalid_user"。
    • 您是如何登录的?
    • 我将验证码请求链接粘贴到浏览器并以非管理员用户(可能是访客)身份登录并获取验证码。然后将授权代码粘贴到我的 c# 项目中以请求令牌和数据。
    • 不能使用guest账号,需要使用有邮箱的账号登录。
    • 嗨杰森,很抱歉这些琐碎的问题!我不确定如何指定它是客人,我可以在上述步骤中看到吗?如果我用的是真实的hotmail地址和邮箱,也是401未授权。
    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2020-07-09
    • 2020-12-30
    • 1970-01-01
    • 2020-04-06
    • 2014-07-27
    相关资源
    最近更新 更多