列出外部帐户所属的组时结果不一致
Inconsistent results when listing groups an external account belongs to
我们的 Google 域中的群组(我们的 Active Directory 电子邮件 listservs/distribution 群组的同步副本)有很多外部帐户(当前作为联系人保存在 Active Directory 中)。
作为我正在构建的 Intranet 站点的一部分,我正在尝试能够进行大量搜索,并在例如学区更改其域名时替换个人联系电子邮件地址。我正在处理的 visual/verification 步骤之一是列出任何选定外部帐户的 Google 组成员资格,但我得到的结果好坏参半。对于某些帐户,它似乎正确地列出了组,而对于其他帐户,它似乎没有列出任何组。我已经在 Active Directory 和 Google 管理员组管理中验证了外部帐户的组成员资格,但是当我通过代码查询 Google 时,我每次都没有得到有效结果......我错过了什么?下面的代码。
-- in Global.asax
public static List<string> GOOGLE_GetListOfUsersGroups(string useremail)
{
List<string> groupList = new List<string>();
try
{
///stripped out credential/service stuff...
var groups = service.Groups.List();
groups.UserKey = useremail;
Groups gs = groups.Execute();
if (gs != null)
{
foreach (Google.Apis.Admin.Directory.directory_v1.Data.Group g in gs.GroupsValue)
groupList.Add(g.Email);
}
}
catch (Exception ex)
{
SendERROREmail("GLOBAL<HR>GOOGLE_GetListOfUsersGroups()<HR>useremail:" + useremail + "<HR>" + ex.ToString());
}
return groupList;
}
和消费函数:
--- in Page.aspx
protected void ddlADExternalContacts_SelectedIndexChanged(object sender, EventArgs e)
{
lbContactsGoogleGroups.Items.Clear();
if (ddlADExternalContacts.SelectedIndex > 0)
{
//show what google has for same group
List<string> memberList = Global.GOOGLE_GetListOfUsersGroups(ddlADExternalContacts.SelectedValue);
if (memberList != null)
{
foreach (string s in memberList)
lbContactsGoogleGroups.Items.Add(new ListItem(s, s));
}
}
}
另外,有没有人有一个很好的例子如何在 Google 的 'preferred' JSON 格式而不是 API 路由中处理这个问题?
更新:好的,这不是我的代码,它与 group/Google 有关。当我在 sdk 管理站点上使用 'try it' 功能时,我得到了工作组(在我的代码和他们的站点中)相同的结果,并且没有来自应该显示结果的相同组的结果...
{
"kind": "admin#directory#groups",
"etag": "\"HKdfSgTnCxrWl3RtRnlZSCPY3NjdWJxz53nrhwSz7ob4/oMWMqbsluP5m2PCo8Y7WmWeHGP4\""
}
这对我没有任何帮助,因为没有错误或其他任何东西,只是 'no groups' 结果好像找不到外部帐户...
更新 2:好的,根据我在一些测试后看到的情况,我偷偷怀疑 Google 在检查组成员资格和报告任何内容之前正在对电子邮件进行一些验证。 IE。如果正在搜索的电子邮件不再有效(客户端的服务器没有响应该帐户是 reachable/enabled/exists...),它不会再继续...将尝试更多我知道的电子邮件地址应该无效并更新....稍后。
看起来您遇到的问题可能是一个错误。
这已在 Google 问题跟踪器 here 上报告。
在这种情况下你可以做的是在上面的问题上加注星标,最后添加一条评论说你受到了它的影响。
我们的 Google 域中的群组(我们的 Active Directory 电子邮件 listservs/distribution 群组的同步副本)有很多外部帐户(当前作为联系人保存在 Active Directory 中)。
作为我正在构建的 Intranet 站点的一部分,我正在尝试能够进行大量搜索,并在例如学区更改其域名时替换个人联系电子邮件地址。我正在处理的 visual/verification 步骤之一是列出任何选定外部帐户的 Google 组成员资格,但我得到的结果好坏参半。对于某些帐户,它似乎正确地列出了组,而对于其他帐户,它似乎没有列出任何组。我已经在 Active Directory 和 Google 管理员组管理中验证了外部帐户的组成员资格,但是当我通过代码查询 Google 时,我每次都没有得到有效结果......我错过了什么?下面的代码。
-- in Global.asax
public static List<string> GOOGLE_GetListOfUsersGroups(string useremail)
{
List<string> groupList = new List<string>();
try
{
///stripped out credential/service stuff...
var groups = service.Groups.List();
groups.UserKey = useremail;
Groups gs = groups.Execute();
if (gs != null)
{
foreach (Google.Apis.Admin.Directory.directory_v1.Data.Group g in gs.GroupsValue)
groupList.Add(g.Email);
}
}
catch (Exception ex)
{
SendERROREmail("GLOBAL<HR>GOOGLE_GetListOfUsersGroups()<HR>useremail:" + useremail + "<HR>" + ex.ToString());
}
return groupList;
}
和消费函数:
--- in Page.aspx
protected void ddlADExternalContacts_SelectedIndexChanged(object sender, EventArgs e)
{
lbContactsGoogleGroups.Items.Clear();
if (ddlADExternalContacts.SelectedIndex > 0)
{
//show what google has for same group
List<string> memberList = Global.GOOGLE_GetListOfUsersGroups(ddlADExternalContacts.SelectedValue);
if (memberList != null)
{
foreach (string s in memberList)
lbContactsGoogleGroups.Items.Add(new ListItem(s, s));
}
}
}
另外,有没有人有一个很好的例子如何在 Google 的 'preferred' JSON 格式而不是 API 路由中处理这个问题?
更新:好的,这不是我的代码,它与 group/Google 有关。当我在 sdk 管理站点上使用 'try it' 功能时,我得到了工作组(在我的代码和他们的站点中)相同的结果,并且没有来自应该显示结果的相同组的结果...
{
"kind": "admin#directory#groups",
"etag": "\"HKdfSgTnCxrWl3RtRnlZSCPY3NjdWJxz53nrhwSz7ob4/oMWMqbsluP5m2PCo8Y7WmWeHGP4\""
}
这对我没有任何帮助,因为没有错误或其他任何东西,只是 'no groups' 结果好像找不到外部帐户...
更新 2:好的,根据我在一些测试后看到的情况,我偷偷怀疑 Google 在检查组成员资格和报告任何内容之前正在对电子邮件进行一些验证。 IE。如果正在搜索的电子邮件不再有效(客户端的服务器没有响应该帐户是 reachable/enabled/exists...),它不会再继续...将尝试更多我知道的电子邮件地址应该无效并更新....稍后。
看起来您遇到的问题可能是一个错误。
这已在 Google 问题跟踪器 here 上报告。
在这种情况下你可以做的是在上面的问题上加注星标,最后添加一条评论说你受到了它的影响。