从控制台应用程序访问用户和组
Access users and groups from a console application
我需要从控制台应用程序中获取 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"
}
通常,在构建使用应用程序权限的应用程序时,该应用程序需要一个页面或视图,管理员在该页面或视图上批准该应用程序的权限。如果您正在构建服务应用程序,您可以手动转到 https://login.microsoftonline.com/{tenant name}/adminconsent?client_id={application id}&state={some state data}&redirect_uri={redirect uri}
使用网络浏览器。
在使用此应用程序之前,租户管理员必须登录并允许使用此应用程序一次,不再需要登录(管理员同意)。管理员同意流程后,当使用客户端凭据流获取令牌时microsoft graph api ,如果您在 online tool 解码访问令牌,您可以在 roles
声明中找到 Group.Read.All
和 User.Read.All
应用程序权限。
请单击here and here了解有关如何将应用程序权限与 Azure AD v2 端点和 Microsoft Graph 结合使用的更多详细信息
我需要从控制台应用程序中获取 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"
}
通常,在构建使用应用程序权限的应用程序时,该应用程序需要一个页面或视图,管理员在该页面或视图上批准该应用程序的权限。如果您正在构建服务应用程序,您可以手动转到 https://login.microsoftonline.com/{tenant name}/adminconsent?client_id={application id}&state={some state data}&redirect_uri={redirect uri}
使用网络浏览器。
在使用此应用程序之前,租户管理员必须登录并允许使用此应用程序一次,不再需要登录(管理员同意)。管理员同意流程后,当使用客户端凭据流获取令牌时microsoft graph api ,如果您在 online tool 解码访问令牌,您可以在 roles
声明中找到 Group.Read.All
和 User.Read.All
应用程序权限。
请单击here and here了解有关如何将应用程序权限与 Azure AD v2 端点和 Microsoft Graph 结合使用的更多详细信息