【发布时间】:2018-01-12 02:23:48
【问题描述】:
在一个旧应用程序中,我公司中的一些人无需登录用户即可从 Microsoft Graph 获取信息。我尝试复制此操作,但在尝试获取用户时未获得授权。我认为图表可能已经改变,或者我在注册我的应用程序时在 Azure 中做错了。
因此,我在 Azure 门户中注册了一个应用程序(网络应用程序),并授予它 Azure 广告和 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);
但是现在我收到一条错误消息,提示未经授权,承载访问令牌为空。 这些错误指向我让用户登录并执行请求,但是我不想让用户登录。据我所知,这在以前是可能的。 Microsoft 是否已将其更改为不允许匿名请求?
如果是这样,是否可以不将用户重定向到同意页面?用户已经通过 Owin 登录。但是,用户可能有不同的访问权限,我希望这个应用程序能够访问 azure 广告中的所有内容,无论用户是否登录。如今如何正确执行此操作?
或者我只是遗漏了一些明显的东西?该应用已获得 azure 和 microsoft graph 的访问权限,并且管理员已授予该应用的权限。
编辑:为了澄清,我尝试了“Authorization”、“bearer” + _token.Token 和 _token.Token,就像在 sn-p 中一样。
【问题讨论】:
标签: azure azure-active-directory microsoft-graph-api