AAD微软图,客户端凭据

时间:2017-09-01 13:30:02

标签: azure-active-directory microsoft-graph

我已经设置了Office 365 E3试用帐户。我在AAD注册了两个应用程序。

第一个使用“授权代码流”并按预期工作(可以访问登录用户日历)。

第二个应用使用“客户端凭据流”并且不起作用。

1. login in Browser (Edge)

GET /OAuthTest3 HTTP/1.1

HTTP/1.1 302 Found
Location: https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<app_id>&redirect_uri=http://localhost:1234/OAuthTest3

GET /OAuthTest3?admin_consent=True&tenant=<tenant> HTTP/1.1

HTTP/1.1 200 OK


2. connect to https://login.microsoftonline.com/

POST /<tenant>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com

client_id=<app_id>&
client_secret=<client_secret>&
grant_type=client_credentials&
redirect_uri=http://localhost:1234/OAuthTest3&
resource=https://graph.microsoft.com/&
scope=https://graph.microsoft.com/calendars.readwrite


HTTP/1.1 200 OK
{
  "token_type": "Bearer",
  "expires_in": "3600",
  "ext_expires_in": "0",
  "expires_on": "1504333342",
  "not_before": "1504329442",
  "resource": "https://graph.microsoft.com/",
  "access_token": <token>
}


3. connect to https://graph.microsoft.com/

GET /v1.0/users/<user>/calendars HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer <token>

HTTP/1.1 403 Forbidden
{
  "error": {
    "code": "ErrorAccessDenied",
    "message": "Access is denied. Check credentials and try again.",
    "innerError": {
      "request-id": "e7228de4-2b27-4779-abef-ccab0d88970a",
      "date": "2017-09-02T05:22:27"
    }
  }
}

由于

了Emil

1 个答案:

答案 0 :(得分:1)

要在AAD V2.0中使用客户端凭据流,您需要首先为您的应用程序对象Admin Consent。即使您不需要使用授权代码授权同意相同的范围,也是如此。

查看v2 Endpoint and Admin Consent获取同意后的步骤。

更新:

范围与客户端凭据的工作方式不同。您需要在应用的注册中定义范围,而不是使用空格分隔列表(https://graph.microsoft.com/user.read https://graph.microsoft.com/calendars.readwrite)动态请求范围。

这是使用https://apps.dev.microsoft.com门户网站完成的。在您的应用注册中,找到&#34;应用权限&#34;部分并单击&#34;添加&#34;按钮。这将弹出一个对话框,您可以在其中选择所需的权限:

permissions

在您的应用程序中,您还需要更改scope参数,以便系统知道使用您注册的范围。这是通过传递范围的https://graph.microsoft.com/.default来完成的:

POST /<tenant>/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com

client_id=<app_id>&
client_secret=<client_secret>&
grant_type=client_credentials&
redirect_uri=http://localhost:1234/OAuthTest3&
resource=https://graph.microsoft.com/&
scope=https://graph.microsoft.com/.default
  

重要提示:每当您更改范围时,都必须在新范围同意之前重新执行管理员同意流程。