我需要从控制台应用程序获取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"
}
答案 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.All
和roles
个应用程序权限。
请点击here和here,了解有关如何在Azure AD v2端点和Microsoft Graph中使用应用程序权限的详细信息