我使用Azure AD和Office 365 api在我的项目中做OAuth。我的问题是我只能有admin帐户(如"user@project.onmicrosoft.com")授权并获得数据,但非admin常规帐户(例如"user@hotmail.com")不能。
如何实现OAuth2
- 获取授权码:
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id={my client Id}&redirect_uri={重定向uri}&resource=https%3A%2F%2Foutlook.office365.com%2F&state={guid}
- 获取访问令牌和刷新令牌:
- 获取用户数据(例如,日历事件):
- 我不确定是否由Azure AD权限设置引起,因此目前授予"Windows Azure Active Directory"one_answers"Office 365 Exchange Online"的所有可用权限。
- 我没有支付这个Azure广告。我有一个Office 365开发者帐户,有一个链接到AAD内部的Office管理中心。不确定这是不是原因。我是否需要支付额外的AAD订阅费用?
以前对账户的误解。像"user@project.onmicrosoft.com"这样的帐户是Office 365帐户,而不是管理员帐户。Hotmail帐户实际上是普通的microsoft帐户
Jason提到,Azure v1端点不支持microsoft帐户授权。这主要是指向授权代码的生成。
必须在新的门户(https://apps.dev.microsoft.com)中创建Azure AD应用程序。
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);
}
注意:
11/2/2016更新
您说您授予了Exchange和Active Directory的所有权限。其中一些权限需要管理员,这可能是您的问题。您应该只授予您的应用程序所需的权限。