从控制台应用程序访问用户和组

时间:2017-07-11 12:51:17

标签: azure office365 azure-active-directory microsoft-graph azure-ad-graph-api

我需要从控制台应用程序获取Office 365 AD中的组和用户列表。

我认为我应该可以使用Microsoft Graph。所以我首先尝试获取令牌:

curl -H "Content-Type: application/x-www-form-urlencoded" --data "grant_type=client_credentials&client_id=<hidden uuid>&client_secret=<hidden secret>&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" https://login.microsoftonline.com/testdirectory.onmicrosoft.com/oauth2/v2.0/token

我在这里成功收到了一个令牌

然后我尝试获取所有用户的列表

curl -H "Accept: application/json" -H "Authorization: Bearer <hidden bearer token>" https://graph.microsoft.com/v1.0/users

但我得到的回复是

{
  "error": {
    "code": "Authorization_IdentityNotFound",
    "message": "The identity of the calling application could not be established.",
    "innerError": {
      "request-id": "<hiden-uuid>",
      "date": "2017-07-11T12:47:17"
    }
  }
}

应该注意的是,我在https://apps.dev.microsoft.com/有一个注册申请。我还将Group.Read.All和User.Read.All权限分配为委托权限和应用程序权限。问题是,因为它是一个控制台应用程序,我想我不能要求用户同意。但由于该应用程序已在我们的域帐户注册,我认为它应该可行吗?或者我如何授予服务或控制台应用程序访问AD的权限?

来自@juunas的请求编辑是解码内容:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "<hidden>",
  "kid": "<hidden>"
}

{
  "aud": "https://graph.microsoft.com",
  "iss": "https://sts.windows.net/<hidden_uuid>/",
  "iat": 1499718180,
  "nbf": 1499718180,
  "exp": 1499722080,
  "aio": "<hidden>",
  "app_displayname": "<hidden>",
  "appid": "<hidden>",
  "appidacr": "1",
  "idp": "https://sts.windows.net/<hidden_uuid_same_as_above>/",
  "tid": "<hidden>",
  "uti": "<hidden>",
  "ver": "1.0"
}

1 个答案:

答案 0 :(得分:1)

通常,在构建使用应用程序权限的应用程序时,应用程序需要管理员批准应用程序权限的页面或视图。如果您要构建服务应用程序,可以手动使用Web浏览器转到https://login.microsoftonline.com/{tenant name}/adminconsent?client_id={application id}&state={some state data}&redirect_uri={redirect uri}

在使用此应用程序之前,租户管理员必须登录并允许仅使用此应用程序一次,并且不再需要登录(管理员同意)。在管理员同意过程之后,使用客户端凭据流获取微软图形的令牌时api,如果您在online tool解码访问令牌,则可以在Group.Read.All声明中找到User.Read.Allroles个应用程序权限。

请点击herehere,了解有关如何在Azure AD v2端点和Microsoft Graph中使用应用程序权限的详细信息