0

我在 Web API 控制器中有以下代码,其中一些用于调试目的:

public void Register([FromBody]AccountInfo accountInfo)
    {
        User user = new User();
        user.accountEnabled = true;
        user.displayName = accountInfo.UserName;
        user.userPrincipalName = string.Format(CultureInfo.InvariantCulture, "{0}@{1}", user.displayName, ConfigurationManager.AppSettings["TenantDomainName"]);
        user.mailNickname = accountInfo.UserName;
        user.passwordProfile.password = accountInfo.Password;
        user.passwordProfile.forceChangePasswordNextLogin = false;
        DirectoryService.AddTousers(user);
        DirectoryService.SaveChanges();

        Group securityGroup = DirectoryService.groups.Where(u => u.displayName.Equals(accountInfo.SecurityGroup)).First();
        User addedUser = DirectoryService.users.Where(u => u.objectId.Equals(user.objectId)).First();
        DirectoryService.LoadProperty(addedUser, "memberOf");
        DirectoryService.LoadProperty(securityGroup, "members");

        DirectoryService.AddLink(securityGroup, "members", addedUser);
        //securityGroup.members.Add(addedUser);
        var users = securityGroup.members.ToList();
        var links = DirectoryService.Links;
        //DirectoryService.UpdateObject(securityGroup);
        DirectoryService.SaveChanges();
    }

上面的代码在 Windows Azure Active Directory 中添加了一个用户,然后尝试将该用户添加到一个组中。用户在没有任何故障的情况下被添加到 WAAD,但代码在最后一行失败并显示

“http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">Authorization_RequestDenied 权限不足,无法完成操作。”

错误信息。它不允许我将用户添加到组中。既然我的服务主体有足够的权限将用户添加到 AAD,为什么不能将用户添加到现有组?

4

1 回答 1

1

您可能需要在 Azure 门户中提供适当的访问权限,并在您的项目中为WEB APPLICATION AND/OR WEB API进行配置。最近在门户中进行了此更改(在我们不得不使用 PowerShell 做很多事情之前)。

我们发表了一篇文章,或多或少地解释了如何配置所有内容:

http://www.clouddevx.com/en-us/Blog/ArtMID/836/ArticleID/2

编辑:

只是为了提供更多解释,我认为您可能必须使用有关在 Azure 门户中获得的客户端 ID 和密码的信息来设置服务:

var tenantName = "emyode.com";

string clientId = " Azure 门户中获取的 clientId ";

string password = " Azure 门户中获取的安全密钥";

var token = DirectoryDataServiceAuthorizationHelper.GetAuthorizationToken(tenantName, clientId, password);

var graphService = new DirectoryDataService(tenantName, token);

于 2014-01-08T21:56:28.513 回答