Azure 匿名请求用户信息Microsoft Graph

Azure 匿名请求用户信息Microsoft Graph,azure,azure-active-directory,microsoft-graph-api,Azure,Azure Active Directory,Microsoft Graph Api,在一个旧的应用程序中,我公司的一些人可以从Microsoft Graph中获取信息,而无需用户登录。我曾尝试复制此功能,但在尝试获取用户时未经授权。我认为图表可能已经改变,或者我在Azure中注册应用程序时做了一些错误的事情 因此,在Azure门户中,我注册了一个应用程序(web应用程序),并授予Azure ad和Microsoft graph读取所有用户完整配置文件的权限 然后我做一个请求 var client = new RestClient(string.Format("https://l

在一个旧的应用程序中,我公司的一些人可以从Microsoft Graph中获取信息,而无需用户登录。我曾尝试复制此功能,但在尝试获取用户时未经授权。我认为图表可能已经改变,或者我在Azure中注册应用程序时做了一些错误的事情

因此,在Azure门户中,我注册了一个应用程序(web应用程序),并授予Azure ad和Microsoft graph读取所有用户完整配置文件的权限

然后我做一个请求

var client = new RestClient(string.Format("https://login.microsoftonline.com/{0}/oauth2/token", _tenant));

var request = new RestRequest();
request.Method = Method.POST;

request.AddParameter("tenant", _tenant);
request.AddParameter("client_id", _clientId);
request.AddParameter("client_secret", _secret);
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("resource", "https://graph.microsoft.com");
request.AddParameter("scope", "Directory.Read.All"); 
我在测试时添加了最后一行(范围)。我仍然得到了一个没有这个标记的标记,但是无论有没有它,结果都是一样的

获得令牌后,我保存它并执行此请求:

var testClient = new RestClient(string.Format("https://graph.microsoft.com/v1.0/users/{0}", "test@test.onmicrosoft.com")); //I use a real user here in my code ofc.
testRequest = new RestRequest();
testRequest.Method = Method.GET;
testRequest.AddParameter("Authorization", _token.Token);
var testResponse = testClient.Execute(testRequest);
但是现在我得到一个错误,说unauthorized,Bearer访问令牌是空的。 错误指示我登录用户并执行请求,但我不想登录用户。据我所知,这以前是可能的。Microsoft是否已将其更改为不允许匿名请求

如果是,是否可以不将用户重定向到同意页面?用户已通过Owin登录。但是,用户可能有不同的访问权限,我希望此应用程序能够访问azure广告中的所有内容,无论用户登录的是哪一个。现在这样做的正确方法是什么

还是我错过了一些明显的东西?该应用已被授予访问azure和microsoft graph的权限,管理员已授予该应用的权限


编辑:为了澄清,我尝试了代码段中的“授权”、“承载”+\u token.token和just\u token.token。

是的,仍然可以在用户不在场的情况下使用。您需要获得租户管理员同意并批准您的申请


编辑/回答:添加“授权”作为标题而不是参数就可以了。它既可以使用“承载令牌”,也可以使用“令牌”

是的,在没有用户在场的情况下,仍然可以使用它发出图形请求。您需要获得租户管理员同意并批准您的申请


编辑/回答:添加“授权”作为标题而不是参数就可以了。它同时适用于“承载令牌”和“令牌”

我应该澄清一下,我已经尝试了这两种方法。我试过“持票人代币”和“普通代币”。我会把它编辑清楚。我需要什么权限?我授予了阅读所有用户配置文件的权限(并同意作为管理员),包括完整和基本。我还需要什么?我想这些范围足够了。您是否尝试过将令牌作为HTTP头发送,而不是序列化参数?它成功了,我编辑了您的答案并将其添加到了那里。谢谢!我应该澄清一下,我两个都试过了。我试过“持票人代币”和“普通代币”。我会把它编辑清楚。我需要什么权限?我授予了阅读所有用户配置文件的权限(并同意作为管理员),包括完整和基本。我还需要什么?我想这些范围足够了。您是否尝试过将令牌作为HTTP头发送,而不是序列化参数?它成功了,我编辑了您的答案并将其添加到了那里。谢谢!