我希望使用在线Microsoft动态的用户通过OAuth2向我们提供对其帐户的访问权限 . 为了清楚起见,我的用户住在他们自己的租户中,而不是我租户的一部分 .
因此,我注册了Azure AD应用程序并使其成为多租户,但授权URL需要资源ID,这是MS Dynamics上的确切客户URL . 喜欢
https://{orgid}.crm.dynamics.com
但我不希望用户手动输入他们的URL . 我想在OAuth流程中自动计算出他们的资源ID并完成整个过程 .
我怎么能这样做?
顺便说一句,我没有使用C#,如果可以提供HTTP调用,我将不胜感激 .
1 回答
最近,我一直在与一些需要通过OAuth2访问D365的多租户网络应用进行工作/摔跤 . 虽然我没有声称已掌握它,但我已经有一些这样的应用程序正常工作 .
以下是一些想法:
我没有尝试将tenantId放入CRM网址 . 要构建CRM网址,我使用组织“网址名称”,您可以使用以下代码获取 .
此代码假定您已将基本URL放入
web.config
的appSettings
节点:<add key="ida:OrganizationHostName" value="https://{0}.crm.dynamics.com" />
那么这段代码可能会帮助你:
我在哪里看到使用的租户ID是在 Build 认证上下文时
var authContext = new AuthenticationContext($"https://login.windows.net/{tenantID}");
如上所示,您可以从
ClaimsPrincipal
获取它,但我认为我的应用程序现在都使用https://login.windows.net/common
而不是附加tenantId .如果您想获得想象力,可以查询Discovery服务以查看用户有权访问的组织 . 对我而言,Colin Vermander's article是实现这一目标的关键 .