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
- 获取授权码:
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}
- 获取访问令牌和刷新令牌:
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;
- 获取用户数据(例如,日历事件):
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);
}
注:
- 我不确定是不是Azure AD权限设置导致的,所以暂时授予"Windows Azure Active Directory"和"Office 365 Exchange Online"所有可用权限。
- 我没有为这个 Azure AD 付费。我有一个 Office 365 开发人员帐户,并且在 Office 管理中心内有一个 link 到 AAD。不确定是否是这个原因。我需要为额外的 AAD 订阅付费吗?
2016 年 11 月 2 日更新
之前对账户的误解。 "user@project.onmicrosoft.com" 等帐户是 Office 365 帐户,而不是管理员帐户。 Hotmail 帐户实际上是普通的 Microsoft 帐户。
Jason 提到,Azure v1 端点不支持 Microsoft 帐户授权。这里主要是指向授权码生成。
必须在新门户 (https://apps.dev.microsoft.com) 中创建 Azure AD 应用程序。否则会报Application not supported问题。
您说您授予了 Exchange 和 Active Directory 的所有权限。其中一些权限需要管理员,这很可能是您的问题。您应该只授予您的应用程序所需的权限。
我正在使用 Azure AD 和 Office 365 API 在我的项目中执行 OAuth。我的问题是我只能授权 admin 帐户(如 "user@project.onmicrosoft.com")并获取数据,但 non-admin regular 帐户(例如, "user@hotmail.com") 不能。
我如何实施 OAuth2
- 获取授权码:
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}
- 获取访问令牌和刷新令牌:
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;
- 获取用户数据(例如,日历事件):
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);
}
注:
- 我不确定是不是Azure AD权限设置导致的,所以暂时授予"Windows Azure Active Directory"和"Office 365 Exchange Online"所有可用权限。
- 我没有为这个 Azure AD 付费。我有一个 Office 365 开发人员帐户,并且在 Office 管理中心内有一个 link 到 AAD。不确定是否是这个原因。我需要为额外的 AAD 订阅付费吗?
2016 年 11 月 2 日更新
之前对账户的误解。 "user@project.onmicrosoft.com" 等帐户是 Office 365 帐户,而不是管理员帐户。 Hotmail 帐户实际上是普通的 Microsoft 帐户。
Jason 提到,Azure v1 端点不支持 Microsoft 帐户授权。这里主要是指向授权码生成。
必须在新门户 (https://apps.dev.microsoft.com) 中创建 Azure AD 应用程序。否则会报Application not supported问题。
您说您授予了 Exchange 和 Active Directory 的所有权限。其中一些权限需要管理员,这很可能是您的问题。您应该只授予您的应用程序所需的权限。