Dynamics 365Online Server-Side OAuth身份认证二(S2S)

Posted Vic.Tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamics 365Online Server-Side OAuth身份认证二(S2S)相关的知识,希望对你有一定的参考价值。

      N年前在写博文介绍Server Side获取Token调Web API时,在该偏博文中Authentication我们用的是UserCredential是用户名和密码,但你在和其他系统集成让第三方调你接口时,把用户名密码给人家看着就不是很安全,所以本篇介绍下另一种client_secret是如何配置获取Token的,这种方式称之为S2S,也是被推荐的一种方式。

     如何在Azure上注册Application授予Application访问Dynamics权限等配置可参见博文,这里我就不再重复了。

     先贴上示例代码,咱根据示例代码来说

    HttpClient _httpClient = new HttpClient();
            _httpClient.BaseAddress = new Uri("https://contoso.crm5.dynamics.com/");
            _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","e8afc403-2a90-4fe8-998d-e3c1a1a55ac0"),
                new KeyValuePair<string,string>("client_secret","_AGUQlj2iS8~40B~9b0tgisRv21hu_Ka"),
                new KeyValuePair<string,string>("resource","https://contoso.crm5.dynamics.com"),
                new KeyValuePair<string,string>("grant_type","client_credentials"),
                         });
            var res = _httpClient.PostAsync("https://login.microsoftonline.com/bcaa2e66-1956-426f-afa3-caa1de860de6/oauth2/token", content);
            var respo = res.Result.Content.ReadAsStringAsync().Result;

    上述代码和之前的讲ADFS4.0注册application获取token的博文类似,只不过此处的grant_type为client_credentials,上述有两个地方需要注意,一个是client_secret哪来。

     打开你的Azure,在Azure Active Directory中找到你注册的applicaiton,到证书和密码下面新建一个客户端密码,密码的值就是client_secret

     第二个需要注意的地方是post的这个Url中在路径oauth2前面你会看到一串id值,这个id是你的azure的tenant的订阅id,这个id在你的applicaiton的概述中能找到。最前面的域名部分,上述我代码里的是global azure的地址,如果是21v的就是如下地址https://login.chinacloudapi.cn

     到这一步你获取Token是没问题了,但当你用这个token去调用WebAPI时会告知你,当前用户不是组织的member

     所以还需要做一步,把这个application id作为user加入D365, 进设置-安全-用户,切换到Application User,新建一个User并赋值好权限即可, 一般安全角色给个admin,当然也可以根据你的实际需要给任何符合业务需要的安全角色

 

  上述更多的是说明在使用S2S时的一些关注点,如果是Step By Step的操作,可以参见我之前转载的博文

 

 

以上是关于Dynamics 365Online Server-Side OAuth身份认证二(S2S)的主要内容,如果未能解决你的问题,请参考以下文章

在 Microsoft Dynamics 365 Online中如何调试Plugins in

Dynamics 365 Online用户密码三问及其解答

在SSMS中连接到Dynamics 365 online需要进行以下步骤

怎样创建一个dynamics 365 CRM online plugin

Dynamics 365 Online和On-premises 的不同

更改Dynamics 365 Online登录页面的风格提示背景等信息