我正在基于java的服务器端应用程序中为Office 365帐户实现Oauth 2身份验证。阅读完文档后,我做了以下事情:
https://login.microsoftonline.com/common/oauth2/authorize?client_id= {client_id}& response_type = code& redirect_uri = {redirect url}& response_mode = query
作为对此的回应,我按预期获得了授权码:
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
&client_secret=p@ssw0rd
现在的问题是,当我发送这个帖子请求时,我总是得到错误代码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 :(得分:0)
如果您要请求Office 365的访问令牌,则发送请求中的资源参数应为https%3A%2F%2Foutlook.office.com
。
您也可以像Philip建议的那样使用Microsoft Graph。您可以参考here了解如何选择端点。
答案 1 :(得分:0)
如果收到错误代码“ interaction_required”或“ invalid_grant”,则表示“刷新令牌”存在问题,建议:
答案 2 :(得分:-1)
以下是如何使用Oauth获取Office 365资源的授权 - https://graph.microsoft.io/en-us/docs/authorization/app_authorization