在一个旧的应用程序中,我公司的一些人能够从Microsoft Graph获取信息而无需签署用户。我已尝试复制此信息,但在尝试获取用户时我未经授权。我认为图表可能已经改变,或者当我注册我的应用程序时,我在Azure中做错了什么。
因此,在Azure门户中,我已经注册了一个应用程序(Web应用程序),并授予其对Azure广告和Microsoft图表的权限,以便读取所有用户的完整配置文件。
然后我提出请求
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);
然而,现在我收到一个错误,说未经授权,Bearer访问令牌为空。 错误指向我签署用户并执行请求,但我不想签署用户。据我所知,这是可能的。微软是否将其更改为不允许匿名请求?
如果是这样,是否可以不将用户重定向到同意页面?用户已通过Owin登录。但是,用户可能拥有不同的访问权限,我希望此应用能够访问azure广告中的所有内容,无论用户是谁登录。如今正确的方法是什么?
或者我只是错过了一些明显的东西?该应用程序已被授予访问azure和microsoft图表的权限,并且管理员已授予该应用程序的权限。
编辑:只是为了澄清,我尝试了"授权"," bearer" + _token.Token,只是_token.Token,就像在代码段中一样。
答案 0 :(得分:2)
是的,在没有使用{4}}的用户的情况下,仍然可以向Graph发出请求。您需要获得租户管理员的同意并批准您的申请。
编辑/回答:添加'授权'作为标题而不是参数做了伎俩。它适用于' bearer 令牌'并且只是' 令牌'