1

我正在尝试使用已注册的应用程序 clientCredentials 从 Azure 数据目录中检索数据。我可以很好地获得不记名令牌,但是当我尝试将令牌与 Azure 数据目录 API 一起使用时,我得到 -

WWW-Authenticate: Bearer realm="svc", error="InsufficientScope", error_description="A token with user_impersonation scope is required.", scope="user_impersonation"
X-Powered-By: ASP.NET

401 - Unauthorized: Access is denied due to invalid credentials.
You do not have permission to view this directory or page using the credentials that you supplied.

我已授予应用程序针对 AD 和 ADC 的权限,并且还在 AD 中的应用程序中添加了贡献者角色。

不知道为什么会这样……让我发疯。

我可以在控制台应用程序中使用用户密码凭据来完成这项工作,但是当我尝试在 Web 应用程序中执行此操作时,它就会崩溃。

干杯

4

3 回答 3

1

错误是说您的电话缺少范围。我猜这个范围可能是一个委派的权限。在这种情况下,您不能仅使用客户端凭据进行调用,因为它需要是委托调用。对于 Web 应用程序,您应该使用授权代码授权而不是客户端凭据。

于 2017-06-20T04:11:22.633 回答
1

我们目前不支持使用 ClientCredentials 进行授权。您需要使用用户/密码登录,以便令牌包含用户特定信息,以便在目录上获得授权。

_authResult = 等待 authContext.AcquireTokenAsync(resourceUri, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.Always))

希望这会有所帮助,莫妮卡

于 2017-10-04T21:22:46.703 回答
0

应用程序权限基于客户端凭据。基于登录用户权限的委托权限。

在此数据目录中没有任何应用程序权限。因此,在基于窗口的应用程序中,您无法在没有登录的情况下访问。

如果您需要没有登录弹出窗口,您的 authContext.AcquireTokenAsync() 方法也可以在没有提示的情况下传递用户名和密码。

在此处输入图像描述

在此处输入图像描述

因此,您会得到 401 - Unauthorized: 由于凭据无效,访问被拒绝。

因为,如果您有访问令牌,登录令牌不包含任何用户特定信息和角色,只需在jwt.io网站上查看,以便在该令牌信息的左侧右侧显示中插入您编码的令牌。它包含一些用于访问权限的角色,该权限不包含您的令牌,因此它会抛出未经授权的无效凭据

我显示以下权限的示例访问令牌

在此处输入图像描述

希望对你有帮助

于 2017-10-05T14:07:46.107 回答