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
在SSMS中连接到Dynamics 365 online需要进行以下步骤
怎样创建一个dynamics 365 CRM online plugin