设为首页 收藏本站
查看: 873|回复: 0

[经验分享] SharePoint 2013 同步FBA认证用户

[复制链接]

尚未签到

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



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账号


DSC0002.gif DSC0003.gif


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     try
50     {
51         if (oDE.Properties.Contains(PropertyName))
52         {
53             return oDE.Properties[PropertyName][0].ToString();
54         }
55         else
56         {
57             return string.Empty;
58         }
59     }
60     catch (Exception ee)
61     {
62         throw ee;
63     }
64 }
View Code  后记
  思路、代码比较简单,希望给大家一个参考吧;运行过程中,可以封装成TimerJob、控制台和Windows计划任务、Windows服务等均可,看大家需要和熟悉程度吧。
  好吧,就到这里,休息,休息一下。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118493-1-1.html 上篇帖子: 迁移TFS,批量将文档导入SharePoint 2013 文档库 下篇帖子: PowerPivot: SharePoint与Excel 在数据分析领域的配合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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