Microsoft Graph代表用户获取访问权限

时间:2019-05-27 12:22:07

标签: angular

无法通过从Angular到Azure AD向/ token终结点发送POST请求来获取访问令牌。

如本文档(https://docs.microsoft.com/en-us/graph/auth-v2-user中所述,在获得成功之后,我尝试使用Angular 6从Azure AD获取访问令牌,但我的请求似乎没有到达Azure AD终结点。 / p>

如果我使用相同的参数执行邮递员的请求,则会得到响应。

我没有发现我的请求出了什么问题?

预先感谢您的帮助!

getToken(tokenId: string) {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded',
        'Host': 'login.microsoftonline.com'
      })
    };
    const body = new HttpParams()
      .set("client_id", "my_client_id")
      .set("scope", "user.read offline_access")
      .set("redirect_uri", "https://localhost:3000/")
      .set("grant_type", "authorization_code")
      .set("client_secret", "my_client_secret")
      .set("code", tokenId);

    this.http.post("https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/token", body.toString(), httpOptions).toPromise()
    .then(res => {
      // success
    })
    .catch(err => {
      this.error = JSON.stringify(err);
    });
  }

出现错误:

“从源'https://login.microsoftonline.com/my_tenant-id/oauth2/v2.0/token'到'https://localhost:3000'处对XMLHttpRequest的访问已被CORS策略阻止:所请求的资源上没有'Access-Control-Allow-Origin'标头” < / p>

我试图在标题中添加'Access-Control-Allow-Origin':'*',但是它不起作用...

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:由于CORS的限制,Angular无法请求“ https://login.microsoftonline.com/my_tenant_id/oauth2/v2.0/token”。 因此,我将授权代码发布到后端,后端发出从Azure AD获取访问令牌的请求,并将令牌和刷新令牌返回到Angular。

ps:在获取第一个授权代码时不要忘记“ offline_access”作用域参数,以确保稍后获得“ refresh_token”!