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信息拷出来,解析下是否带有用户信息,如果有就表示是正确的。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是 Windows Server 2016 安装及配置 ADFS 4.0 的步骤: 1. 安装 Windows Server 2016 操作系统。 2. 打开服务器管理器,选择“添加角色和功能”。 3. 在“安装类型”页面上,选择“基于角色或基于功能的安装”。 4. 在“选择目标服务器”页面上,选择要安装 ADFS 4.0 的服务器。 5. 在“选择服务器角色”页面上,选择“Active Directory联合服务”。 6. 在“选择功能”页面上,选择“AD FS”和“AD FS管理器”。 7. 在“安装”页面上,单击“安装”按钮进行安装。 8. 安装完成后,打开“AD FS管理器”。 9. 在“AD FS管理器”中,单击“联合服务”节点,选择“AD FS 4.0管理向导”。 10. 在“AD FS 4.0管理向导”中,按照向导提示配置 ADFS 4.0。 配置 ADFS 4.0 的过程中,需要进行以下操作: 1. 配置证书:ADFS 4.0 需要使用证书来保护与其他组织的通信。可以使用自签名证书或通过证书颁发机构获取证书。 2. 配置联合身份提供者(IDP):在 ADFS 4.0 中,可以配置多个 IDP。可以选择使用 Active Directory 或其他身份提供者,如 Azure AD。 3. 配置联合身份验证:可以使用多种身份验证方法,如基于密码的身份验证、多因素身份验证等。 4. 配置 Relying Party Trust(RPT):RPT 是指向其他组织提供的信任。需要为每个 RPT 配置相关信息,如证书、身份验证方法等。 以上是 Windows Server 2016 安装及配置 ADFS 4.0 的步骤和操作,希望能对你有所帮助。如果有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值