创建AD用户会抛出Authorization_RequestDenied:“没有足够的权限来完成操作。”例外

时间:2016-09-29 08:54:02

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

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

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

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

“没有足够的权限来完成操作。” “{\” odata.error \ “:{\” 代码\ “:\” Authorization_RequestDenied \ “\ ”消息\“:{\ ”郎\“:\ ”EN \“,\ ”值\“:\”没有足够的权限来完成操作。\“}}}”    在System.Data.Services.Client.SaveResult.HandleResponse()    在System.Data.Services.Client.BaseSaveResult.EndRequest()    在System.Data.Services.Client.DataServiceContext.EndSaveChanges(IAsyncResult asyncResult)    在System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction,Action 1 endAction, Task 1 promise,Boolean requiresSynchronization) ---从抛出异常的先前位置开始的堆栈跟踪结束---    在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper.d__74.MoveNext()

使用AppId& amp;秘密,因为控制台应用程序没有UI。

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());
}

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

祝你好运, 延

1 个答案:

答案 0 :(得分:2)

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

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