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的操作,可以参见我之前转载的博文

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值