2017-10-23 25 views
1

私は現在Office365用のアプリケーションを作成していますが、ユーザーのアクセストークンを取得する必要がありますが、すべて問題はないようです。ネットワークデバッガは、応答が良好であることを示しています... 応答はOKですが、なぜ私はエラーが発生するのか分かりません。Miccrosoft Graph accesトークンを取得できませんでした(JavaScript)

コード

async getUserAccesToken(code) { 
    var resource = `https://login.microsoftonline.com/${tenantDomain}/oauth2/v2.0/token`; 
    var tokenRequest = { 
     client_id: clientId, 
     scope: 'offline_access user.read', 
     code: code, 
     redirect_uri: 'http://localhost:3000/acces', 
     grant_type: 'authorization_code', 
     client_secret: clientSecreta 
    } 

    return await this.getEncodedPostResponse(resource, tokenRequest); 
} 

async getEncodedPostResponse(resource, postBody) { 
    var encodedPostBody = Object.keys(postBody).map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(postBody[key])).join('&'); 
    debugger; 
    return await fetch(resource, { 
      method: "POST", 
      body: encodedPostBody, 
      headers: new Headers({ 
       'Accept': 'application/json; charset=utf-8;', 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }) 
     }) 
     .catch(err => { 
      debugger; 
     }) 
     .then(response => response.json()) 
     .then(jsonResponse => jsonResponse); 
} 

エラー(1/2) ErrorDetails

エラー(2/2) enter image description here

私の中に成功応答ChromeのデバッグGER enter image description here

答えて

1

物事のカップル:

  • あなたはAccess-Control-Allow-Originを取得しています。サーバーは、HTTP応答のヘッダーでドメイン間コールのルールを定義する必要があります。 Mozillaのドキュメントには、このトピックに関する優れた記事が含まれています:Cross-Origin Resource Sharing (CORS)

  • アクセストークンと認証コードが混同しています。 getUserAccesTokenは実際に認証コードを要求しています。アクセストークンは、POSTをエンドポイントに戻して発行し、認証コードをアクセストークンに変換することによって返されます。

  • クライアント側からPOSTにしようとしているようです。この呼び出しはサーバー側に属します。最初の呼び出しで認証コードがlogin.microsoftonline.comで要求されます。ユーザーが認証すると、microsoftonline.comredirect_uriにユーザーを送信します。サーバーがこの要求を受信するときには、ユーザーのアクセストークンを取得するためにPOSTを発行する必要があります。 Microsoft v2 Endpoint Primer

私は認証コードの流れは、あなたが役に立つかもしれませんv2のエンドポイントでどのように機能するかをウォークスルーの記事を持っています。

+0

ありがとうございます、私はノードJSを通じて** authorization_code **をリクエストして問題を解決しました –

関連する問題