0

我们开发了一个 .NET 控制台应用程序来添加应用程序、组和用户。在同一个应用程序中,我们有添加组 -> 应用程序和用户 -> 组的方法。我们发现用户并不总是按预期添加到指定的组中。发生这种情况时,我们不会收到错误消息。

我们正在使用 Okta .NET SDK v4.0.30319。下面是我们执行的将用户添加到组的方法。有没有人遇到过这个问题,如果有,您是如何解决的?

static List<string> OktaAddGroupUser(string sGroupName, string sLogin, Okta.Core.Clients.GroupsClient groupsClient, Okta.Core.Clients.UsersClient usersClient, string strOktaToken, string strOktaSubdomain)
    {
        List<string> arrayReturn = new List<string>();
        Okta.Core.PagedResults<Group> oktaGroups;
        Okta.Core.Clients.GroupUsersClient oktaGroupUsersClient;

        try
        {
            var oktaUser = usersClient.Get(sLogin);
            oktaGroups = groupsClient.GetList();

            foreach (var oktaGroup in oktaGroups.Results) 
            {
                if (oktaGroup.Profile.Name.ToString() == sGroupName)
                {
                    oktaGroupUsersClient = new Okta.Core.Clients.GroupUsersClient(oktaGroup, strOktaToken, "ogletree");
                    oktaGroupUsersClient.Add(oktaUser);
                }
            }

            arrayReturn.Add("0");
            arrayReturn.Add("OktaAddUserGroup: User successfully added to group");
        }
        catch (Okta.Core.OktaException e)
        {
            arrayReturn.Add(e.ErrorCode.ToString());
            arrayReturn.Add("OktaAddUserGroup: " + e.Message.ToString());
        }

        return arrayReturn;
    }
4

1 回答 1

0

当您有超过 200 个组(通常来说,您的 Okta 租户中有超过 200 个 Okta 项目)时,会出现此问题。

实际上,当您调用 GetList() 方法时,将应用 200 的默认页面大小(如果您不覆盖 pageSize 参数),因此 GetList() 调用将只返回它找到的前 200 个项目。

GetList() 方法支持可选参数,例如“查询”和“过滤”参数,可用于执行更优化的查询并避免不必要的循环。

在您的特定情况下,因为您只对检索具有特定名称的特定组感兴趣,您应该使用 GetList(query: sGroupName) 调用。这应该返回一个 PageResults 对象,其 Results 属性中只有一个对象(最多!该组也可能不存在)。

执行 GetList(query: "somevalue") 将转换为添加到 REST 查询中的 "?q=somevalue" 参数。调用 Groups API 时,查询将类似于 {{url}}/api/v1/groups?limit=200&q=somevalue,您可以在 Postman 中轻松测试(参见http://developer.okta.com/ docs/api/getting_started/api_test_client.html

我希望这有帮助!

于 2016-01-29T01:36:39.957 回答