Dynamics 365 基於ADFS 2016(4.0)的OAuth2 CRM Web API Request
前年我寫過一篇Dynamics 365 Online基於OAuth2身份驗證的Web Api Request,點選檢視,該方式是基於azure的,需要在azure中註冊clientid,在這之後嘗試過on-presimes的server-side的OAuth搞Web Api Request一直沒有成功,後來得知是因為adfs3.0不支援,最近在Windows server2016上操作成功了,也就是adfs4.0版本,這個版本中引入了application groups。
本篇即來分享下,如何配置adfs4.0的application groups,以及c#程式碼示例。
先上配置,開啟adfs配置介面,點選應用程式組,新增應用程式組,此處我們選擇client端的第二個(即我圖中紅框選中的)
點選下一步,此處的客戶端識別符號拷貝記下來(後面程式碼中clientid的引數就是這個),重定向URI可以隨意寫
繼續下一步,此處勾選第三個,點選複製剪貼簿將其複製下來,後面的程式碼中的client_secret就是這個
繼續下一步,此處的識別符號即你CRM的web api的源地址(即後面程式碼中的resource引數)
繼續下一步,之後的都是預設的直到完成為止,最後要編輯下web api的頒發轉換規則,同IFD部署時的Replying Party中的規則一樣
到此為止配置就完成了,下面附上程式碼,注意幾個引數client_id,client_secret,resource我在上面配置的時候都有提過
HttpClient _httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri("https://demo.vyung.com:446/");
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
_httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string,string>("client_id","f55ece56-96ce-4d6d-a15a-e13228314224"),
new KeyValuePair<string,string>("client_secret","A6raiZccmuQ1YB8qOFWUkR-iXwr8otZZE-eoTzXO"),
new KeyValuePair<string,string>("resource","https://demo.domain.com:446/api/data/v8.2"),
new KeyValuePair<string,string>("username",@"domain\crmadmin"),
new KeyValuePair<string,string>("password","password01"),
new KeyValuePair<string,string>("grant_type","password"),
});
var res = _httpClient.PostAsync("https://sts.domain.com/adfs/oauth2/token", content);
var respo = res.Result.Content.ReadAsStringAsync().Result;
var accesstoken = JObject.Parse(respo).GetValue("access_token").ToString();
var myUri = new Uri("https://demo.domain.com:446/api/data/v8.2/accounts?$top=1");
var myWebRequest = WebRequest.Create(myUri);
var myHttpWebRequest = (HttpWebRequest)myWebRequest;
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.Headers.Add("Authorization", "Bearer " + accesstoken);
myHttpWebRequest.Accept = "application/json";
var myWebResponse = myWebRequest.GetResponse();
var responseStream = myWebResponse.GetResponseStream();
var myStreamReader = new StreamReader(responseStream, Encoding.Default);
var json = myStreamReader.ReadToEnd();
responseStream.Close();
myWebResponse.Close();
看下取到的accesstoken
我們可以把token解析出來看下,帶了使用者的upn等資訊
最後看下web api 獲取到的資料,取得是account的第一條資料叫做Fourth Coffee(sample)的示例資料,成功獲取。
當然你如果不想在vs中寫程式碼呼叫測試,也可以用fiddler跟蹤下,requestbody如下
grant_type=password&username=crmadmin@domain.com&password=Password01&client_id=f55ece56-96ce-4d6d-a15a-e13228314224&redirect_uri=http://localhost/callback&client_secret=A6raiZccmuQ1YB8qOFWUkR-iXwr8otZZE-eoTzXO&resource=https://demo.domain.com:446/api/data/v8.2/
然後把token資訊拷出來,解析下是否帶有使用者資訊,如果有就表示是正確的。
相關文章
- Dynamics 365 Web API Set Values of all Data Types using Web API in Dynamics CRM Through C#WebAPIC#
- VSCode JavaScript snippets for Dynamics 365/CRM 2011/2013/2015/2016VSCodeJavaScript
- 如何將Dynamics CRM 2016(on-premises)升級到Dynamics 365(on-premises)REM
- Dynamics 365 Web API模擬使用者WebAPI
- Dynamics 365 Web API 批處理(batch requests)WebAPIBAT
- Difference between Microsoft Dynamics 365 WEB API, Organization Service and Organization Data ServicROSWebAPI
- Dynamics 365(三)WEB資源使用Web
- Dynamics 365中的Client API form context (formContext)clientAPIORMContext
- Dynamics 365 基於Sql Server2017的All In One安裝SQLServer
- Dynamics CRM 2016 404 error before any report runsError
- Dynamics CRM 365零基礎入門學習(一)Dynamics介紹以及開發工具配置
- Dynamics 365 Web Api 檢查使用者是否具有某個安全形色WebAPI
- Dynamics CRM JavaScript API智慧提示(Visual Studio)JavaScriptAPI
- Server2016 ADFS4.0 The same client browser session has made '6' requests in the last '13'seconds(二)ServerclientSessionAST
- Dynamics 365 控制右側欄的介面
- 不攔截Request!基於WKWebView的API實現Hybrid容器WebViewAPI
- ADFS3.0/4.0 證書更新/替換S3
- Dynamics CRM 365 - 零基礎入門學習後端外掛語法總結(樣例使用方法)後端
- Dynamics CRM Performance Issue when CRM Forms OpeningORM
- Dynamics CRM Connectivity and Firewall Port Requirements——CRM安裝UIREM
- Dynamics CRM 2013 批處理
- Dynamics CRM 使用ILMerge 合併CRM開發後的DLL
- Dynamics 365(CRM) 歡迎加入商務技術交流QQ群(MSCRM商務技術交流群149371424)
- Dynamics 365的通話記錄phonecall,ActivityPointer和phonecall的關係
- Dynamics CRM 2013 常用JS指令碼JS指令碼
- Dynamics CRM實體系列之窗體
- Web Api 基於Zookeeper的服務註冊與發現WebAPI
- Dynamics CRM 介紹兩款Chrome元件,用於提升開發效率Chrome元件
- Dynamics 365 Online和On-premises在開發方式上的差別REM
- Dynamics 365中的事件框架與事件執行管道(Event execution pipeline)事件框架
- dynamics crm跳轉到手機版本的頁面
- Dynamics 365 Online fetchXml報表的顯示數量的限制與否XML
- Asp.Net web api基於自定義Filter的安全認證ASP.NETWebAPIFilter
- Dynamics CRM 資料遷移工具DataMigrationUtility
- Dynamics CRM實體系列之檢視
- Dynamics CRM實體系列之圖表
- Dynamics CRM CRM Reporting Error: Error occurred while fetching the data extension的解決方法ErrorWhile
- ADFS4.0 使用nginx做反向代理訪問報502錯的解決方法Nginx