Azure图形服务找不到新创建的用户



我有一个web应用程序,使用Azure ACS和Azure AD来处理我们的身份验证。

我们在web应用程序中有一个用户管理功能,允许用户创建新用户。这将获取用户名、密码、电子邮件等详细信息,并使用图形服务在azure中创建用户。

        var newUser = new Microsoft.WindowsAzure.ActiveDirectory.User
        {
            userPrincipalName = user.UserName,
            mailNickname = user.MailNickname,
            accountEnabled = true,
            displayName = user.FirstName + " " + user.Surname,
            givenName = user.FirstName,
            surname = user.Surname
        };
        newUser.passwordProfile = new PasswordProfile
        {
            forceChangePasswordNextLogin = false,
            password = user.Password
        };
        var graphService = GetGraphService(tenantName);
        graphService.AddTousers(newUser);
        graphService.SaveChanges();
然后,我们需要在web应用程序数据库中为该用户创建一条记录。记录需要来自azure的对象ID。因此,我们使用graphService来获取新创建的用户详细信息。这就是我的问题所在。它找不到用户。
    private string GetObjectIdFromAzure(string userName, string tenantName)
    {
        var graphService = GetGraphService(tenantName);
        var users = graphService.users;
        QueryOperationResponse<Microsoft.WindowsAzure.ActiveDirectory.User> response;
        response = users.Execute() as QueryOperationResponse<Microsoft.WindowsAzure.ActiveDirectory.User>;
        var user = response.FirstOrDefault(x => x.userPrincipalName == userName);
        return user != null ? user.objectId : "";
    }

我的代码工作没有任何问题几个月,只有今天我有问题。更让我沮丧的是,我有另一个部署相同的代码,它的工作没有任何问题。这两个部署之间的一些差异如下:

  1. 部署在Azure中使用不同的访问控制命名空间
  2. 部署在Azure AD中有单独的应用程序
  3. 一个是https一个是http

两个系统的用户在同一个目录下。

我已经在两个部署中加入了登录,以获得

返回的用户数量
users.Execute()

在两个系统中,它报告100(它们共享相同的用户)

你知道什么会导致这个停止工作吗?我最近没有更改任何与此相关的代码,我没有更改Azure上的任何配置,也没有更改web。应用程序配置

这个问题是由于我在检索用户后过滤用户而引起的。图形API最多只能返回100个用户。

过程是这样的:

    在Azure中创建的用户
  1. 返回成功消息
  2. Web应用程序在Azure中搜索用户以获取对象ID
  3. Graph Api只返回前100名用户。用户未按字母顺序进入前100名,因此抛出错误

它在我们的第二次部署中工作的原因是我在用户名前加上了demo_(我们在发布之前使用这个站点来演示新功能)。这意味着它是在前100个用户中返回的。

我将代码更改如下,以便在检索期间而不是之后进行过滤:

    private Microsoft.WindowsAzure.ActiveDirectory.User GetUserFromAzure(string userName, string tenantName, out DirectoryDataService graphService)
    {
        graphService = GetGraphService(tenantName);
        var users = (DataServiceQuery<Microsoft.WindowsAzure.ActiveDirectory.User>)graphService.users.Where(x => x.userPrincipalName == userName);
        QueryOperationResponse<Microsoft.WindowsAzure.ActiveDirectory.User> response;
        response = users.Execute() as QueryOperationResponse<Microsoft.WindowsAzure.ActiveDirectory.User>;
        var user = response.FirstOrDefault();
        return user;
    }

相关内容

  • 没有找到相关文章

最新更新