0

私は、Azure ADを介してDynamics 365 for Operationsで認証される単一ページのWebアプリケーションを作成しようとしています。私はAzure ADとDynamics 365でアプリケーションを登録するためのすべての指示に従っています。私はAzure ADで正常に認証され、adal javascriptライブラリを使用してアプリケーションで有効なトークンを受け取りましたが、D365のODataエンドポイント401エラーが表示されます。私はAzure ADで認証されており、認証ヘッダーに自分のトークンを渡しているので、認証ヘッダーを正しく設定していない限り、なぜ認証エラーが発生するのかわかりません。ここに私の要求があります:操作SPAおよびODataのDynamics 365

//Function that actually retrieves the accounts 
function retrieveAccounts(error, token) { 
// Handle ADAL Errors. 
if (error || !token) { 
    errorMessage.textContent = 'ADAL error occurred: ' + error; 
    return; 
} 

var req = new XMLHttpRequest() 
req.open("GET", encodeURI(organizationURI + "/data/Projects"), true); 
//Set Bearer token 
req.setRequestHeader("Authorization", "Bearer" + token); 
req.setRequestHeader("Accept", "application/json"); 
req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
req.setRequestHeader("OData-MaxVersion", "4.0"); 
req.setRequestHeader("OData-Version", "4.0"); 
req.onreadystatechange = function() { 
    if (this.readyState == 4 /* complete */) { 
     req.onreadystatechange = null; 
     if (this.status == 200) { 
      var projects = JSON.parse(this.response).value; 
      renderProjects(projects); 
     } 
     else { 
      var error = JSON.parse(this.response).error; 
      console.log(error.message); 
      errorMessage.textContent = error.message; 
     } 
    } 
}; 
req.send(); 
} 

アイデアは大変ありがとう!私はこれをDynamics 365 CRMでWeb APIを使用して成功させることができたため、セットアップは少し異なりますが、Operationsでもうまくいくと想定しています。

答えて

0

この方法はうまくいかず、D365 Operations ODataエンドポイントをクライアントシークレットで認証する必要があると考えられます。このメソッドでは、サービスへの呼び出しでベアラトークンとして渡されているJWTトークンは、クライアントキーで署名されていません。私は単一のWebアプリケーションからこれを行うための安全な方法はないと思います。答えはサーバ側のコールを処理し、データをSPAに戻す第2のWebアプリケーションAPIを作成することだと考えているので、これを閉じます。

関連する問題