最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

SharePoint 2013 同步FBA认证用户

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-3 13:13:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
SharePoint 开启了基于FBA的身份认证,经常会遇到用户组用户的问题,当我加入一个AD账号,无法同时加入Form认证的用户,这时,只能手动添加,比较麻烦;所以,写了一个服务,用来每天晚上同步一下用户组中的AD账号和Form账号。原理
  原理比较简单,就是遍历用户组的所有用户,同步的时候首先删掉所有的Form账号,然后根据所有的AD账号去查找Form账号重新添加;如果碰到AD安全组,就去安全组中遍历所有的用户,然后查找Form账号添加,每天晚上定时执行。
优点
  免去添加账号的时候添加2次,而且服务可以手动执行,定时执行等;
缺点
  并非实时同步,而且无法单独在用户组中加入Form账号,无法满足断开权限,无法满足单独按照人授权的情况。
总结
  在自己的需求中,用户权限控制比较简单,均按照用户组授权,没有唯一权限设置,所以用起来还是挺好的,而且用户对于Form账号没有实时的要求。如果复杂的权限控制,还需进一步增强代码,呵呵。
效果
  执行前,只有AD账号和AD安全组,如下图:

  执行后,多出了所有Form认证的账号,如下图:

代码片段
  遍历所有用户组

1 using (SPSite site = new SPSite("http://SPServer")) 2 { 3     using (SPWeb web = site.RootWeb) 4     { 5         foreach (SPGroup group in web.Groups) 6         { 7             foreach (SPUser user in group.Users) 8             { 9                 if (user.LoginName.IndexOf("custommembership") > 0)10                 {11                     group.RemoveUser(user);12                 }13             }14 15             foreach (SPUser user in group.Users)16             {17                 if (user.LoginName.IndexOf("domain") > 0)18                 {19                     group.Users.Add("i:0#.f|custommembership|" + user.Email, user.Email, user.LoginName, user.Notes);20                 }21 22                 if (user.IsDomainGroup)23                 {24                     DomainGroup(group, user.Name);25                 }26             }27         }28     }29 }

  去AD目录中查找AD账号
1 public static string DomainGroup(SPGroup group, string DomainGroupName) 2 { 3     string returnStr = string.Empty; 4     SearchResultCollection results = null; 5 6     string filter = "(&(objectClass=group)(cn=" + DomainGroupName + "))"; 7     string connectionPrefix = "LDAP://linyu.ad.com.cn"; 8     using (DirectoryEntry root = new DirectoryEntry(connectionPrefix)) 9     {10         using (DirectorySearcher searcher = new DirectorySearcher(root))11         {12             searcher.ReferralChasing = ReferralChasingOption.All;13             searcher.SearchScope = SearchScope.Subtree;14             searcher.Filter = filter;15             results = searcher.FindAll();16         }17     }18     foreach (SearchResult sr in results)19     {20 21         DirectoryEntry deGroup = new DirectoryEntry(sr.Path);22         System.DirectoryServices.PropertyCollection pcoll = deGroup.Properties;23         int n = pcoll["member"].Count;24         Console.WriteLine(n.ToString());25 26         for (int i = 0; i < n; i++)27         {28             DirectoryEntry deUser = new DirectoryEntry(connectionPrefix + "/" + pcoll["member"].ToString());29 30             string username = deUser.Name.ToString();31             if (username.IndexOf("=") > 0)32             {33                 username = username.Split('=')[1];34             }35 36             string email = GetProperty(deUser, "mail");37             if (email.IndexOf("@") > 0)38             {39                 Console.WriteLine(username);40                 group.AddUser("i:0#.f|custommembership|" + email, email, username, "");41             }42         }43     }44     return returnStr;45 }46 47 public static string GetProperty(DirectoryEntry oDE, string PropertyName)48 {49     try50     {51         if (oDE.Properties.Contains(PropertyName))52         {53             return oDE.Properties[PropertyName][0].ToString();54         }55         else56         {57             return string.Empty;58         }59     }60     catch (Exception ee)61     {62         throw ee;63     }64 }
View Code
后记
  思路、代码比较简单,希望给大家一个参考吧;运行过程中,可以封装成TimerJob、控制台和Windows计划任务、Windows服务等均可,看大家需要和熟悉程度吧。
  好吧,就到这里,休息,休息一下。。。


楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-20 22:16

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表