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

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

代码片段
遍历所有用户组
using (SPSite site = new SPSite("http://SPServer"))
{
using (SPWeb web = site.RootWeb)
{
foreach (SPGroup group in web.Groups)
{
foreach (SPUser user in group.Users)
{
if (user.LoginName.IndexOf("custommembership") > )
{
group.RemoveUser(user);
}
}
foreach (SPUser user in group.Users)
{
if (user.LoginName.IndexOf("domain") > )
{
group.Users.Add("i:0#.f|custommembership|" + user.Email, user.Email, user.LoginName, user.Notes);
}
if (user.IsDomainGroup)
{
DomainGroup(group, user.Name);
}
}
}
}
}
去AD目录中查找AD账号
public static string DomainGroup(SPGroup group, string DomainGroupName)
{
string returnStr = string.Empty;
SearchResultCollection results = null; string filter = "(&(objectClass=group)(cn=" + DomainGroupName + "))";
string connectionPrefix = "LDAP://linyu.ad.com.cn";
using (DirectoryEntry root = new DirectoryEntry(connectionPrefix))
{
using (DirectorySearcher searcher = new DirectorySearcher(root))
{
searcher.ReferralChasing = ReferralChasingOption.All;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = filter;
results = searcher.FindAll();
}
}
foreach (SearchResult sr in results)
{ DirectoryEntry deGroup = new DirectoryEntry(sr.Path);
System.DirectoryServices.PropertyCollection pcoll = deGroup.Properties;
int n = pcoll["member"].Count;
Console.WriteLine(n.ToString()); for (int i = ; i < n; i++)
{
DirectoryEntry deUser = new DirectoryEntry(connectionPrefix + "/" + pcoll["member"][i].ToString()); string username = deUser.Name.ToString();
if (username.IndexOf("=") > )
{
username = username.Split('=')[];
} string email = GetProperty(deUser, "mail");
if (email.IndexOf("@") > )
{
Console.WriteLine(username);
group.AddUser("i:0#.f|custommembership|" + email, email, username, "");
}
}
}
return returnStr;
} public static string GetProperty(DirectoryEntry oDE, string PropertyName)
{
try
{
if (oDE.Properties.Contains(PropertyName))
{
return oDE.Properties[PropertyName][].ToString();
}
else
{
return string.Empty;
}
}
catch (Exception ee)
{
throw ee;
}
}
后记
思路、代码比较简单,希望给大家一个参考吧;运行过程中,可以封装成TimerJob、控制台和Windows计划任务、Windows服务等均可,看大家需要和熟悉程度吧。
好吧,就到这里,休息,休息一下。。。
SharePoint 2013 同步FBA认证用户的更多相关文章
- SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
前 言 上面一篇博客,我们了解到如何为SharePoint 2013配置表单身份认证,但是添加用户是一个麻烦事儿:其实,我们还可以用Asp.Net的配置工具,为SharePoint 2013添加表单用 ...
- SharePoint 2013 表单认证使用ASP.Net配置工具加入用户
前 言 上面一篇博客,我们了解到怎样为SharePoint 2013配置表单身份认证.可是加入用户是一个麻烦事儿:事实上,我们还能够用Asp.Net的配置工具,为SharePoint 2013加入表单 ...
- SharePoint 2013中以其他用户身份登录的WebPart(免费下载)
在SharePoint 2013中微软并没有提供在SharePoint 2010中以其他用户身份登录的菜单,这对一般用户影响不大,但对于系统管理员或测试人员或特定人员(如在OA系统中的文员或秘书,常常 ...
- Sharepoint 2013 user permissions(用户权限)
Read: This permission level gives you read-only access to the website. Contribute: In addition to ...
- SharePoint 2013 启用 以其他用户身份登陆(Sign in as different user)
习惯于SharePoint 2010的用户会发现,SharePoint 2013默认把 以其他用户身份登陆(Sign in as different user)的选项去掉了,这对于开发人员来说很麻烦 ...
- SharePoint 2013 显示“以其他用户身份登录”菜单项
最近在SharePoint 2013的网站上发现,没有看到有切换不同用户登录的入口,在SharePoint 2010中是存在这样的菜单项能够很方便的进行用户切换的,不知道为什么,SharePoint ...
- SharePoint 2013 使用 PowerShell 更新用户
在SharePoint开发中,经常会遇到网站部署,然而,当我们从开发环境,部署到正式环境以后,尤其是备份还原,所有用户组的用户,还依然是开发环境的,这时,我们就需要用PowerShell更新一下: P ...
- SharePoint 2013 JavaScript 对象判断用户权限
场 景 近期有个场景,判断当前用户对项目有没有编辑权限,使用JavaScript完成,弄了好久才弄出来,分享一下,有需要的自行扩展吧,具体如下: 代 码 function getPermissions ...
- SharePoint 2013 更新多个用户字段(Person or Group)
有时我们需要更新一个用户到Person or Group类型的字段, 当然这个属性允许设置多个用户, 要如何才能添加新的用户到该字段,同时还不影响原始存在的值. 这里我们需要了解 SPFieldUse ...
随机推荐
- 同级、父子级div定位
以两个div右上角对齐为例: 效果图: 1.同级定位 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- JQuery 实现页面无刷新
对于JQuery实现页面无刷新的效果,即:应用这个JQuery这个组件,可以实现在页面上加载数据库中的数据信息,但是并没有给用户页面刷新的感觉,这样既可以有效的进行数据交互,也可以不妨碍用户的其他操作 ...
- javascript学习6
JavaScript Boolean(逻辑)对象 Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false). 实例 检查逻辑值 检查逻辑对象是 true 还是 false. ...
- 没有R.java问题找不到getActionBar()方法
android项目,可是项目中没有重要的R.java,并且报错,说是找不到getActionBar()方法,上网寻找原因,终于寻得解决方法: 1.解决项目中没有R.java问题.在Eclipse ...
- Windows Azure Active Directory (1) 前言 - 基于声明的验证和授权
<Windows Azure Platform 系列文章目录> 在我们介绍整套系统架构之前,我们需要首先定义一些基本的概念. 用户及其属性: 用户值得是要使用某项服务的个体.用户一般都有一 ...
- JAVA 设计模式 装饰者模式
用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构
- Elasticsearch 动态映射——自动检测
ES中有一个非常重要的特性——动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 那么什么是映射呢?映射就是描述字段的类型.如何进行分析.如何进行索引等内 ...
- html/css基础篇——DOM中关于脱离文档流的几种情况分析
所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版中拿走. ...
- LeetCode - Populating Next Right Pointers in Each Node
题目: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode ...
- 【转载】那些年我们一起清除过的浮动demo
返回文章:那些年我们一起清除过的浮动 闭合浮动 与 清除浮动 的区别 .main:很抱歉,现代浏览器中我没能把warp撑高(float:left) .side:我也浮动了(float:left) .f ...