2017-04-19 79 views
0

如何從使用Angular 2(TypeScript)構建的SPA內驗證並查詢Dynamics CRM Web API?使用Angular 2(TypeScript)驗證和查詢Dynamics CRM Web API

研究迄今已建議:

  • 的動態CRM(2016或365版本)實例必須註冊爲Azure中的應用程序。
  • 用戶可以通過Azure AD通過Azure註冊的應用程序進行身份驗證。 Azure有一個用JavaScript編寫的名爲ADAL的客戶端身份驗證庫。

我嘗試到目前爲止還涉及克隆各種角2個回購與ADAL建,如this one,和編輯自己的配置文件來對我的Azure應用程序指向。這些嘗試都導致了401 (Unauthorized) cross-domain錯誤,詳見我的separate question

使用在this JavaScript的相同的配置(例如cliendId)步行通過從微軟是成功的。

+0

您是否完成了本演練,以確保在介紹Angular複雜性之前您已掌握所有工作:https://msdn.microsoft.com/en-us/library/mt595797.aspx? – Nicknow

+0

我已經能夠成功完成該漫遊。爲了它的工作,我不得不使用我的Dynamics實例的_Service Root URL_,而不是文檔要求的_organizationURI_。我還必須將API版本從_v8.0_更改爲_v8.2_。 –

回答

1

Fei Xue提供的代碼示例here on GitHub已經證實可以在Azure託管的Dynamics CRM應用程序進行身份驗證並查詢Web API。

我用過的類似代碼示例導致了401 Unauthorized HTTP錯誤。爲什麼這個樣本有效,而其他人目前還沒有得到答案。

1

This Access-Control-Allow-Origin問題更多的是相對於服務器端。無論您是使用Angular 1還是Angular 2進行開發,都無所謂。

您可以確認此問題手動發送選項請求以驗證您的域是否被允許請求。例如,我們可以檢查是否從http://localhost:3000 AJAX請求是使用下面的請求允許:

OPTIONS: https://xxxx.crm.dynamics.com/api/data/v8.0/accounts 
Authorization: Bearer {accessToken} 
Origin: http://localhost:3000 
Host: xxxx.crm.dynamics.com 
Access-Control-Request-Headers: authorization 
Access-Control-Request-Method: GET 

如果它會返回像下面的迴應,如果域名被允許(參考Access-Control-Allow-Origin): enter image description here

要解決此問題,您需要檢查服務器是否支持CORS。如果不允許,您可以創建一個Web API作爲解決方法的代理。

+0

[我的其他問題](http://stackoverflow.com/questions/43372088/unauthorized-http-request-to-dynamics-crm-web-api-via-angular-2-using-adal)顯示在**下響應1 **標題,我正在發送'OPTIONS'預飛行請求,該請求正在返回'200 OK',頭部爲'Access-Control-Allow-Origin:http:// localhost:3000'。這表明在服務器上啓用了CORS,但是通過我的代碼發送請求的方式引發了一個問題。 –

+1

看來問題是相對於令牌不是無效的,你是否能夠在你的SPA中捕獲令牌並再次使用PSOT man來測試它? In-addiion,您是否檢查過我上傳的Angular 2的代碼示例? –