【问题标题】:ionic2 microsoft Graph API Get not workingionic2 microsoft Graph API 无法正常工作
【发布时间】:2017-09-14 13:49:03
【问题描述】:

我正在将 Microsoft Graph API 添加到应用程序,但 Get 无法正常工作。我什至不确定它是否发送请求。我得到的 URL 来自 Microsoft Graph Explorer。

我能够通过 ADAL 正确地进行身份验证,并取回令牌。代码如下:

import {Http, Headers} from "@angular/http";
import {Injectable} from "@angular/core";
//import 'rxjs/add/operator/map'
//import 'rxjs/add/operator/catch'
import 'rxjs/Rx';


@Injectable()
export class EmailRESTService {

data: any;
token = localStorage.getItem("token");


constructor(private http: Http) {
    this.data = null;
}

load() {

  console.log('Inside EmailREST Promise: ');
  this.http.get('https://graph.microsoft.com/v1.0/me', {
    headers: new Headers ({"Authorization": "Bearer " + this.token})
  }).subscribe(data => {
      if(data.status == 200){
        this.data = data.json();
      }

      if(data.status!= 200){
        console.log('SOmething worng in Subscribe');
      }
    });   
  }
}

我得到这个输出:

console.log('Inside EmailREST Promise: ');

但之后没有输出。我从网上尝试了许多建议/代码,但没有成功。

这是在错误的 API 端点(Azure Graph API 与 Graph API)上使用 ADAL Auth 的问题吗?我尝试使用此网址: https://graph.windows.net/me?api-version 对于 Azure Graph API 没有成功

提前致谢。

【问题讨论】:

  • 令牌中的audscp 声明是什么?您可以解码来自here 的令牌和令牌中的声明。
  • @FeiXue "aud":"graph.windows.net" & "scp": "User.Read"
  • 你应该写一个错误处理程序,订阅函数的第二个参数。将该错误记录到控制台。或者,您可以检查网络选项卡以查看呼叫失败的原因
  • 我觉得你还需要发送 Content-Type header
  • 看起来您可能正在混合和匹配 AAD Graph 和 Microsoft Graph - 但它们是不同的。如果您正在调用 Microsoft Graph,则需要获取具有https://graph.microsoft.com 受众 (aud) 的令牌。您在评论回复中拥有的是 AAD Graph 的受众。

标签: angular ionic2 microsoft-graph-api azure-ad-graph-api


【解决方案1】:

感谢大家的反馈。我很感激。 我设法获得了 Azure AD 图形 API 的令牌并调用了该库。但是,这使我可以访问用户/组操作,而不是我需要的电子邮件和其他操作。 我刚刚和微软通了电话,他们建议我使用 MSAL,而不是 ADAL。 MSAL javascript 包正在预览中。他们还没有科尔多瓦包。仅限本机设备。我会看看这对我有用。即使我在我的项目中使用 npm 安装了软件包,并在此处使用他们的教程:https://github.com/AzureAD/microsoft-authentication-library-for-js 我仍然在实时“找不到变量 Msal”时遇到一些错误,我相信这本身不是 Msal 问题,但一个进口问题。 再次强调,“Azure AD 图形 API”与“图形 API”不同,前者只会让您访问用户操作。因此,如果您希望获得电子邮件功能,请小心,不要在这上面浪费时间

【讨论】:

    【解决方案2】:

    根据代码,您获得了 Azure AD Graph 的令牌。但是,在代码中,您调用的是 Microsoft Graph(https://graph.microsoft.com/v1.0/me) 而不是 Azure AD Graph。

    要通过 Azure AD Graph 获取用户信息,您可以参考以下内容:

    GET:https://graph.windows.net/myorganization/me?api-version=1.6
    authorization: bearer {access_token}
    

    或者您可以通过获取评论中提到的 Dan Kershaw 的相应令牌来调用 Microsoft Graph。

    【讨论】:

    • 我怀疑这是以前的问题,所以我使用了它,并不断获得 401 未经授权。我仍然明白这一点。这部分是我困惑的原因。
    • 规范不在 URL 中使用“myorganization”名称。当我使用它时,我得到一个 400 格式错误的错误。我使用我的组织名称作为 xxxx.onmicrosoftonline.com 的第一部分,即 xxxx
    • 401错误的详细错误信息是什么?它应该包含描述错误的更具体的信息。 myorganization 也适用于 Azure AD Graph,因为它使用租户名称或 ID。请参阅here。对于400错误,请检查请求URL是否包含api-version参数,该参数是使用Azure AD Graph所必需的
    • 我切换到图形 API 并获得“aud”:“graph.microsoft.com”和“scp”:“User.Read”。当我试图通过以下方式获取我的信息时:graph.microsoft.com/v1.0/me 我收到此错误:{code: "InvalidAuthenticationToken",…} code:"InvalidAuthenticationToken" innerError :{request-id:"8a7fe7a2-3314-4d83-b89f-d853c6c7d974 ", date: "2017-09-20T07:27:21"} message:"CompactToken 解析失败,错误代码:-2147184105"
    • 我建议您使用 Fiddler 跟踪请求并分享详细请求以帮助识别此问题。或者您可以分享一个演示代码示例来帮助我们重现此问题。
    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多