【问题标题】:Creating AD Users throws Authorization_RequestDenied: "Insufficient privileges to complete the operation." exception创建 AD 用户抛出 Authorization_RequestDenied:“权限不足,无法完成操作。”例外
【发布时间】:2016-09-30 17:19:45
【问题描述】:

我正在创建一个 C# 控制台应用程序,该应用程序正在为特定租户读取和创建 Azure AD 帐户。 我添加了一个 Azure AD 应用程序并记下了 AppId、AppKey (secret)、TenantId、TenantName。

为此,我们使用以下 NuGet 包:

从域中读取 Azure AD 帐户可以正常工作,但创建新的 Azure AD 帐户会引发异常: activeDirectoryClient.Users.AddUserAsync(userToBeAdded).Wait();

“权限不足,无法完成操作。” "{\"odata.error\":{\"code\":\"Authorization_RequestDenied\",\"message\":{\"lang\":\"en\",\"value\":\"权限不足,无法完成操作。\"}}}" 在 System.Data.Services.Client.SaveResult.HandleResponse() 在 System.Data.Services.Client.BaseSaveResult.EndRequest() 在 System.Data.Services.Client.DataServiceContext.EndSaveChanges(IAsyncResult asyncResult) 在 System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func2 endFunction, Action1 endAction, Task1 promise, Boolean requiresSynchronization) --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper.d__74.MoveNext()

由于控制台应用程序没有 UI,因此使用 AppId 和 Secret 执行身份验证。

public async Task<string> AcquireTokenAsyncForApplication()
{
AuthenticationContext authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenantName, false);
// Config for OAuth client credentials 
ClientCredential clientCred = new ClientCredential("<appid>", "<appsecret>");
var authenticationResult = authenticationContext.AcquireTokenAsync("https://graph.windows.net", clientCred);
authenticationResult.Wait();            

return authenticationResult.Result.AccessToken;
}

public void Authenticate()
{
Uri servicePointUri = new Uri("https://graph.windows.net");
Uri serviceRoot = new Uri(servicePointUri, tenantId);
activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async () => await AcquireTokenAsyncForApplication());
}

我启用了应用程序本身的所有许可并委托了许可,但仍然出现授权异常。我怎样才能在这里找到错误?我该如何解决这个问题?

最好的问候, 延斯

【问题讨论】:

    标签: c# azure azure-active-directory azure-ad-graph-api


    【解决方案1】:

    要使用客户端凭据通过 Azure Graph REST 创建用户,我们可以为 应用程序权限 配置 Directory.ReadWrite.All 权限,如下图所示:

    获取访问令牌后,您可以从here解析令牌,并确保Directory.ReadWrite.All在您创建用户之前的令牌中。

    【讨论】:

    • 感谢您的快速响应。令牌解析确实显示:“roles”:[“Directory.Read.All”],但是:在 Azure Portal 中,启用了对其他应用程序“读写目录数据”的权限。我在这里想念什么?最好的问候,延斯
    • 对于该权限,您可能必须通过管理员同意流程才能为应用批准它。
    • 亲爱的,我怎么知道这个?在 Azure 门户(新旧)中,权限似乎处于活动状态。 (我使用 Azure AD 管理员登录门户)
    • @Fei Xue 是正确的。有关 admin_consent 流程的信息在这里:azure.microsoft.com/en-us/documentation/articles/…
    • 但是如果你解析了令牌并且它包含Directory.ReadWrite.All 角色,你应该很高兴,每msdn.microsoft.com/en-us/library/azure/ad/graph/howto/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2017-03-31
    相关资源
    最近更新 更多