我们有一个网站(建立在php框架上),我们为教师/学生提供在线教育工具。我们已经与google.com进行了OAuth集成,用户可以使用他们的Google帐户“注册”和“登录”我们的网站(可以是个人Gmail帐户,也可以是Google Apps域的成员)。
我们正在尝试与O365进行类似的集成,我们的网站可以向O365索取用户的电子邮件和姓/名,以便我们可以在我们的网站上为他们创建帐户,并在创建帐户后将其登录。我们在Azure中创建了一个应用程序列表 - > Active Directory,并生成了客户端ID和密码,并将它们插入到PHP代码中。 OAuth工作流程described here一直有效,直到我尝试使用对https://login.windows.net/common/oauth2/token的POST请求请求访问令牌。它重定向回我的redirect_uri
,但不是给我授权代码,它在URL中给了我这些参数:
[error] => access_denied
[error_description] => AADSTS65005: The client application has requested access to resource 'https://outlook.office365.com/'. This request has failed because the client has not specified this resource in its requiredResourceAccess list.
Trace ID: xxxxxx
Correlation ID: xxxxxx
Timestamp: 2014-09-29 06:28:25Z
[state] => xxxxxx
我需要的是O365给我用户的电子邮件和f / l名称。当然有一个快速的解决方法,我错过了吗?
答案 0 :(得分:13)
默认情况下,已注册的应用程序配置为请求“读取用户的个人资料”,一旦得到用户同意,就允许该应用获取用户令牌(如果使用OpenID Connect,则为ID令牌)并读取已登录的用户调用Azure AD Graph API时的个人资料(包括他们的邮件地址或地址)。 Azure AD保护的应用程序当前必须预先配置他们需要的权限范围(作为应用程序注册体验的一部分,在“其他应用程序的权限”部分下)。 在这里,您似乎已将Outlook.com指定为您希望代码和访问令牌的资源,但您的应用未配置为允许访问O365 Outlook.com/Exchange Online。
请尝试将请求中的资源设置为Azure AD - https://graph.windows.net/。那个应该为你工作。然后,您可以交换访问令牌的代码以调用Azure AD Graph API。
希望这有帮助