Office365 RESTAPI。使用ADAL获取401(未经授权)

Office365 RESTAPI。使用ADAL获取401(未经授权),office365,adal,outlook-restapi,Office365,Adal,Outlook Restapi,我试图使用ADAL库访问Office365 REST API,但得到了一个401(未经授权),我不知道为什么。我已经在Azure广告中注册了一个应用程序,获得了一个id,获取了它的密钥,并授予了它读取Windows Azure Active Directory的权限 我可以获得OAuth令牌,但它不能与Office365 API一起使用 以下是我的一次失败尝试: AuthenticationContext auth = new AuthenticationContext("https://l

我试图使用ADAL库访问Office365 REST API,但得到了一个401(未经授权),我不知道为什么。我已经在Azure广告中注册了一个应用程序,获得了一个id,获取了它的密钥,并授予了它读取Windows Azure Active Directory的权限

我可以获得OAuth令牌,但它不能与Office365 API一起使用

以下是我的一次失败尝试:

  AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/" + myTenant);
  AuthenticationResult authenticationResult = auth.AcquireToken("http://Rest", new ClientCredential(myId, myKey));
  HttpClient client = new HttpClient();
  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
  HttpResponseMessage msg = await client.GetAsync("https://outlook.office365.com/api/v1.0/me/events");
  // => Bam. 401. :(

有什么想法吗

传递给
AcquireToken
的资源ID无效。那应该是
”https://outlook.office365.com/“
。看看这是否有帮助。如果没有,请尝试解析您的令牌并查找问题:

谢谢!正确的resourceid没有帮助,但是您的令牌解析器向我显示,登录的用户标记(upn、unique_name、family_name、given_name)和权限标记(scp:)都丢失了。很明显我错过了一些东西。但是什么呢?您可以尝试在AuthenticationContext的构造函数中使用公共OAuth端点“”。另外,当您注册应用程序时,您是否指定了应用程序权限或委派权限?你总共给了它什么权限?杰森,很抱歉回复晚了,也很抱歉用这些无聊的东西来打扰你。请不要理我。公共端点抱怨我的应用程序不存在。我尝试设置每个应用程序和委托权限。仍然是401:(.Jason.我在http响应中发现了这一点:“访问令牌使用的身份验证方法太弱,不允许访问此应用程序。提供的身份验证强度为1,要求为2”。我想这是我应该遵循的路径。我会更新此帖子。好的。从这个错误来看,听起来你好像在尝试执行客户端凭据身份验证流,它要求身份验证强度为2。这要求你使用证书而不是客户端密件进行身份验证。客户端凭据身份验证流更适用于需要访问组织中的所有邮箱。如果您只是尝试访问登录用户的邮箱,则应使用代码授予流。