2016-08-02 145 views
3

我在基于java的服务器端应用程序中为Office 365帐户实施Oauth 2身份验证。阅读完文档后,我做了以下几件事:在Office 365 Oauth2身份验证中获取令牌

  • 我有Office 365订阅。
  • 我在Azure Actve目录中创建了一个应用程序,这对于使用 office 365帐户验证Web应用程序是必需的。
  • 我有客户端ID和密码。给予Azure应用程序的所有权限,我也有 。
  • 我使用的地址请求授权代码:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=了{client_id} & RESPONSE_TYPE =代码& REDIRECT_URI = {重定向URL} & response_mode =查询

作为其响应,我按预期获得授权码:

http://localhost:8080?code={authorication code}&session_state=259479e4-84aa-42ea-91e9-9e919cc99587 

现在我需要获取令牌以及用户名(用户登录的用户ID),因为我需要用户名进行进一步处理。对于这一点,我使用这里介绍的方法:

https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/

即使用这样的POST请求:

POST /{tenant}/oauth2/token HTTP/1.1 
Host: https://login.microsoftonline.com 
Content-Type: application/x-www-form-urlencoded 
grant_type=authorization_code 
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e 
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA 
&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F 
&resource=https%3A%2F%2Fservice.contoso.com%2F 
&[email protected] 

现在的问题是,当过我送这个帖子的请求,我总是得到错误代码400或402等错误代码等。我也用户在Chrome中的POST男子检查呼叫的响应。它总是返回错误这样的:

{ 
    "error": "invalid_grant", 
    "error_description": "AADSTS65001: The user or administrator has not consented to use the application with ID. Send an interactive authorization request for this user and resource.\r\nTrace ID: b834315e-ccb3-4533-b7c9-4af7b34054b9\r\nCorrelation ID: 784f18da-5479-4b69-b939-0067abfcc460\r\nTimestamp: 2016-08-02 07:28:22Z", 
    "error_codes": [ 
    65001 
    ], 
    "timestamp": "2016-08-02 07:28:22Z", 
    "trace_id": "b834315e-ccb3-4533-b7c9-4af7b34054b9", 
    "correlation_id": "784f18da-5479-4b69-b939-0067abfcc460" 
} 

(注:我已经注册使用管理员登录的所有应用程序) 我已经尝试了很多,找出什么是怎么回事错在这里。我在Azure Active目录中添加了多个应用程序,但我总是得到类似的响应。

我请求专业人士来帮助我。 。 。 !其实我想让用户点击office 365 web加载项中的按钮并使用oauth2身份验证登录到我们的系统。有人建议我一些很好的教程,以成功实现这一点,这将是伟大的。

回答

0

如果您请求对Office 365的访问令牌,在发送请求的资源参数应该是https%3A%2F%2Foutlook.office.com

也可以像Philip建议的那样使用Microsoft Graph。您可以参考here了解如何选择端点。