• D365 FO第三方集成(二)---访问认证(获取访问令牌)


    D365 FO 在github上发布了第三方访问D365 FO的示例代码,里面包含了各种调用示例,代码很清晰。
    https://github.com/microsoft/Dynamics-AX-Integration
    这篇blog简单分析一下代码中获取访问令牌的部分代码。
    与获取访问令牌相关的代码有两个类ClientConfiguration和OAuthHelper。
    ClientConfiguration是用来配置获取访问令牌的参数,因为获取令牌有两种方式 提供D365 FO的用户名和密码和提供访问客户端密码(应用程序密码,就是上文创建的那个密码。)
    这两种对应不同的应用场景,第一种是用于跟用户有交互的场景,用户可以通过输入用户名和密码的方式请求访问令牌。
    第二种是用于系统后台交互,没有用户参与的场景。
    所以代码里分了两个部分useWebAppAuthentication 为false对应第一种场景,为true对应第二种场景。
    我现在做的应用是用于系统后交互,没有用户参与,所以知道应用程序密钥就可以了。

      一定要注意示例代码里的地址是https://login.windows.net对应的是global的AZure,国内的AZure跟global的AZure是物理隔离的,AD域认证都是完全分开的。

    所以地址一定要写成https://login.chinacloudapi.cn,要不然会找不到对应的AD,https://login.chinacloudapi.cn后面跟的是租户ID(TenantID),上文有提到过,从那边复制粘贴过来即可。
    至于ClientAppId和ClientAPPSccret上文也提到过,从AZure Portal上面复制粘贴过来就可以了。
    获取令牌的代码很简单,是通过.NET类库Microsoft.IdentityModel.Clients.ActiveDirectory相应的方法实现的。
    当然不用这个.NET类库也可以很容易通过http请求获取访问令牌。
    用fiddler跟踪一下就可以知道获取令牌的过程了,示例代码里的PHP部分,也可以很容易看出.NET类库做的事情。
    把一些请求信息通过http post请求发送给AZure认证的URL来获取访问令牌。
    http post的URL的地址是
    https://login.chinacloudapi.cn/{租户ID}/oauth2/token
    post的body内容是
    resource=https%3A%2F%2Fusnconeboxax1aos.cloud.onebox.dynamics.cn&client_id={应用程序ID}&client_secret={url编码后的密钥}&grant_type=client_credentials

    请求的结果

    所以任何平台都可以用http请求,拼接出请求字符串,得到访问令牌,如果是.NET平台就更简单了,直接用.NET里的类库就行了,省得自己拼接字符串了。

  • 相关阅读:
    mysql联合主键自增、主键最大长度小记
    针对list集合进行分页展示
    初识javascript变量和基本数据类型
    12.19如何定义正则表达式
    人民币符号在html的显示方法
    windows下的NodeJS安装
    css 实现未知图片垂直居中
    IE678下placeholder效果,支持文本框和密码框
    jvm004 解析与分派
    jvm003 类加载的过程
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/13113232.html
Copyright © 2020-2023  润新知