【问题标题】:Getting token in Office 365 Oauth2 authentication在 Office 365 Oauth2 身份验证中获取令牌
【发布时间】:2016-12-07 11:37:23
【问题描述】:

我正在基于 Java 的服务器端应用程序中为 Office 365 帐户实施 Oauth 2 身份验证。阅读文档后,我做了以下事情:

  • 我订阅了 Office 365。
  • 我在 Azure 中创建了一个应用程序 Actve 目录,这是对使用 Web 应用程序进行身份验证所必需的 办公室 365 帐户。
  • 我有客户端 ID 和密码。我也有 授予 Azure 应用程序的所有权限。
  • 我正在使用 URL 请求授权代码:

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

现在的问题是,每当我发送这个 post 请求时,我总是会收到错误代码,有时是 400 或 402 等。我还使用 POST man in chrome 来检查调用的响应。它总是返回这样的错误:

{
  "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 Directory 中添加了多个应用程序,但总是得到类似的响应。

我请求专业人士帮助我。 . . !实际上,我想允许用户单击 Office 365 Web 插件中的按钮并使用 oauth2 身份验证登录到我们的系统。如果有人建议我一些很好的教程来成功实现这一点,那就太好了。

【问题讨论】:

    标签: azure office365 outlook-addin office-addins microsoft-graph-api


    【解决方案1】:

    收到错误代码“interaction_required”或“invalid_grant”错误代码意味着“刷新令牌”存在问题,建议:

    • 丢弃当前刷新令牌
    • 请求新的授权码

    【讨论】:

      【解决方案2】:

      如果您正在请求 Office 365 的访问令牌,则发送请求中的 resource 参数应为 https%3A%2F%2Foutlook.office.com

      您也可以按照 Philip 的建议使用 Microsoft Graph。如何选择端点可以参考here

      【讨论】:

        猜你喜欢
        • 2022-09-28
        • 2015-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-04
        • 2015-11-02
        • 2016-09-15
        相关资源
        最近更新 更多