【问题标题】:Is it possible to authenticate with Azure AD to access Dynamics Web API using Client Credentials Grant是否可以通过 Azure AD 进行身份验证以使用客户端凭据授予访问 Dynamics Web API
【发布时间】:2017-02-01 06:32:14
【问题描述】:

我有一个已在 Azure AD 上定义为有权访问 Dynamics 365(委托权限)的 Web 应用。

我正在使用 Client Credentials Grant 从 azure AD 获取访问令牌。所以我正在这样做:

var clientCredential = new ClientCredential(clientId, clientSecret);
var result = authContext.AcquireTokenAsync(dynamicsTenant, clientCredential).Result;

但是当我尝试访问这样的 Web API 时,我不断收到 HTTP 401:

var response = httpClient.GetAsync(dynamicsTenant + "/api/data/v8.1/contacts").Result;

它适用于Resource Owner Password Credentials Grant,如下所示:

var userCredential = new UserPasswordCredential("crmuser", "crmpwd");
var result = authContext.AcquireTokenAsync(dynamicsTenant, clientId, userCredential).Result;

Dynamics 365 上是否有可能禁止访问的配置?

我的目标是从(无头)机密客户端使用 Dynamics(在线)Web API。

【问题讨论】:

    标签: authorization microsoft-dynamics azure-active-directory


    【解决方案1】:

    AAD 支持 2 种权限,与两种主要的身份验证方法相匹配。

    有应用权限和委托权限,见here

    应用程序权限:您的客户端应用程序需要访问 Web API 直接作为自身(无用户上下文)。此类权限 需要管理员同意,也不适用于本机 客户端应用程序。

    委派权限:您的客户端应用程序 需要以登录用户身份访问 Web API,但具有访问权限 受所选权限的限制。这种类型的权限可以 由用户授予,除非权限配置为需要 管理员同意。

    为了使用您的委派权限,您可以使用Authorization Code Grant Flow

    如果您使用客户端凭据流来获取访问令牌,则期望您必须请求应用程序权限;否则,你会得到一个未经授权的。

    如果这有帮助,请告诉我!

    【讨论】:

    • 这是我有点期待但不想听到的答案。
    • 你为什么这么说?委托与应用程序权限是一个非常重要的细分。客户端应用程序对 API 的权限可以而且应该根据令牌上下文有很大差异。如果我正在创建一个电子邮件管理应用程序,那么我的应用程序可以在我登录时删除电子邮件是合理的预期,但当应用程序没有我的用户令牌并且在仅应用程序模式下运行时则不能。跨度>
    • 我同意这是一个合理的期望。这只是意味着在我的情况下,我可能需要为我的应用程序登录 Dynamics,因为我没有用户令牌,也没有用户登录,因此我可以获得用户令牌。
    • 为什么不使用应用程序权限,然后使用客户端凭据流?那些没有暴露?
    • 我没有看到能够选择/授予的应用程序权限;相反,我只是委托权限。我正在使用新的 Azure 门户,但无法访问旧门户(可能是由于订阅类型,我不确定)。
    猜你喜欢
    • 2018-11-03
    • 2020-07-04
    • 2021-10-08
    • 2015-04-18
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2015-04-16
    • 2019-12-15
    相关资源
    最近更新 更多