SharePoint 2010 自定义基于SQL表单身份验证的登录页面

当为SharePoint 2010 WebApplication配置了以混合模式(FBA Authentication和Windows Authentication)登陆后,我们当然可以自定义登陆页面(Sign in Page)。

一、登陆SharePoint 2010 Central Administratio后,找到对应的WebApplication,指定其Sign in Page Url即可,如下所示:

二、创建自定义登录项目

  • 首先,为了创建自定义的登陆页,我选择了Application Page,默认将被部署在layouts并和项目名称相同的文件夹中(C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts)。
  • 接着,为了阻止母版页对Application Page的影响,故须去掉母版页的引用,即 DynamicMasterPageFile="~masterurl/default.master"
  • 由于去掉了对母版页的引用,故用于"填坑"控件〈asp:Content/>控件也用不着了,所以整个Application Page将被重新设计。
  • 基于表单验证(FBA )的登陆控件选择了ASP.NET Login控件,设置其相关属性即可。以常见的属性为例:
  • FailureText:登陆失败时提示的消息
  • MembershipProvider:自定义的Membership Provider,需要继承MembershipProvider,详见《SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用
  • DisplayRememberMe:Bool类型,表示是否显示记住我
  • RememberMeSet:表示是否向用户浏览器发送持久化已认证的Cookie,默认是False
  • TextLayout:有2种选择,TextOnLeft(Label在TextBox左),TextOnTop(Label在TextBox上)
  • UserNameLabelText:用户名Label显示文字
  • PasswordLabelText:密码Label显示文字
  • LoginButtonType:有3种选择,Image ,Button,Image
  • LoginButtonImageUrl:若LoginButtonType选择了Image,此属性表示Image地址
  • 完整的Login Control代码如下所示:

<asp:Login
                ID="signInControl"
                style="width: 250px"
                FailureText="用户名或密码错误"
                MembershipProvider="CustomFBA_Membership"
                runat="server"
                DisplayRememberMe="true"
                TextBoxStyle-Width="250px"
                RememberMeSet="true"
                UserNameLabelText="用户名"
                TextLayout="TextOnLeft"
                PasswordLabelText="密码"
                LabelStyle-Font-Bold="false"
                LabelStyle-Font-Size="Large"
                LabelStyle-ForeColor="red"
                LabelStyle-Font-Names="宋体"
                CheckBoxStyle-Font-Bold="false"
                CheckBoxStyle-Font-Names="宋体"
                CheckBoxStyle-ForeColor="White"
                CheckBoxStyle-Font-Size="Large"
                FailureTextStyle-Wrap="true"
                FailureTextStyle-Font-Names="宋体"
                FailureTextStyle-Font-Size="Small"
                LoginButtonStyle-Font-Names="宋体"
                LoginButtonStyle-Font-Size="Large"
                LoginButtonImageUrl="/_layouts/images/loginbtn.png"
                LoginButtonType="Image"
                TitleText="登陆"
                TitleTextStyle-ForeColor="green"
                TitleTextStyle-Font-Bold="true"
                TitleTextStyle-Wrap="true"
                TitleTextStyle-Font-Names="宋体"
                TitleTextStyle-Font-Size="Larger" />

到目前为止基于表单的身份验证登录已经设计好了,但是别忘了,我么还需要Windows身份验证(也就是Acrive Directory Login)的登陆实现。

  • 添加超链接,以实现Windows 身份验证登陆
<asp:LinkButton ID="lbInternalUsers" Text="Active Directory Login" runat="server" Font-Names="宋体" Font-Size="Small" CssClass="ms-standardheader ms-inputformheader" Font-Bold="true" ForeColor="Wheat" OnClick="lbInternalUsers_OnClick" />
  • 在其Click事件中实现以域账号登陆

     protected void lbInternalUsers_OnClick(object sender, EventArgs e)
         {
             try
             {
                 if (null != SPContext.Current && null != SPContext.Current.Site)
                 {
                     SPIisSettings iisSettings = SPContext.Current.Site.WebApplication.IisSettings[SPUrlZone.Default];
                     if (null != iisSettings && iisSettings.UseWindowsClaimsAuthenticationProvider)
                     {
                         SPAuthenticationProvider provider = iisSettings.WindowsClaimsAuthenticationProvider;
                         Redirect(provider);
                     }
                 }
            }
             catch (Exception ex)
             {

             }
         }
         private void Redirect(SPAuthenticationProvider provider)
         {
             string comp = HttpContext.Current.Request.Url.GetComponents(UriComponents.Query, UriFormat.SafeUnescaped);
             string url = provider.AuthenticationRedirectionUrl.ToString();
             if (provider is SPWindowsAuthenticationProvider)
             {
             comp = EnsureUrl(comp, true);
             }

             SPUtility.Redirect(url, SPRedirectFlags.Default, this.Context, comp);
         }
        //http://skyrim:6050/_windows/default.aspx?ReturnUrl=
         private string EnsureUrl(string url, bool urlIsQueryStringOnly)
         {
                if (!url.Contains("ReturnUrl="))
                {
                    if (urlIsQueryStringOnly)
                    {
                    url = url + (string.IsNullOrEmpty(url) ? "" : "&");
                    }
                    else
                    {
                    url = url + ((url.IndexOf(‘?‘) == -1) ? "?" : "&");
                    }
                    url = url + "ReturnUrl=";
                }
                return url;
         }

修改默认Sign In Page

  • 当自定义的Sign In Page完成后,给WebApplicatio指定其URL即可,如下所示:

  • 测试基于表单的身份验证登陆,以验证其是否正常工作,登陆成功后向客户端发送名为FedAuth的Cookie

  • 测试基于Windows的身份验证登陆,以验证其是否正常工作

总结

对于自定义的ASP.NET Login控件的名称,注意其名字必须是:signInControl,我在次纠结了很久(异常信息,登陆成功后仍然显示身份验证无效,重定向至:/Authenticate.aspx?Source=%2F ,并向客户端发送名为ASPXAUTH 的 Cookie,当客户端浏览器记住这个错误的ASPXAUTH  Cookie后,下一次访问,返回 500 内部错误。清理掉此Cookie后,又恢复正常)。暂时没有时间去Reflect Sharepoint原始的Login 控件,我估计这个默认的Login控件的名字也是:signInControl。还有一些注意点,也把我纠结很久,详见我的附件。点击下载

转自:http://www.cnblogs.com/OceanEyes/p/how-to-create-custom-sign-in-page.html

时间: 2024-08-26 08:25:11

SharePoint 2010 自定义基于SQL表单身份验证的登录页面的相关文章

定制Asp.NET 5 MVC内建身份验证机制 - 基于自建SQL Server用户/角色数据表的表单身份验证

背景 在需要进行表单认证的Asp.NET 5 MVC项目被创建后,往往需要根据项目的实际需求做一系列的工作对MVC 5内建的身份验证机制(Asp.NET Identity)进行扩展和定制: Asp.NET内建的身份验证机制会使用Local DB(本地数据库)读写用户相关的信息,而在数据库驱动的项目中,管理业务信息的数据库通常是特定的数据库环境,比如远程SQL Server数据库实例或Access数据库等等,业务数据库中保存着一系列针对业务需求的数据表,因此需要定制MVC 5内建身份验证,使其操作

SharePoint 2010 配置基于SQL的表单身份验证

转发自:http://www.cyqdata.com/cnblogs/article-detail-5601 转发自:http://www.cnblogs.com/janet/archive/2013/07/18/3199234.html 系统环境: win2008r2+ sql2008r2 +Visual Studio2010+sharepoint 2010 A.如果已经建立了web application  例如名字为: http://luoku.cn/ 需要进入SharePoint 201

php表单身份验证

1. index.php <form method="post" action="dbtest.php">            姓名:            <input type="text" name="name">            <br>            <br>            密码:            <input type="

ASP.NET在IE9,IE10,IE11中Form表单身份验证失效问题解决方法

已经研究出解决方案. IE9:在web.config中的forms中增加name=".xCookie"属性即可. IE10或IE11: 在web.config中的forms中增加cookieless="UseCookies"属性即可. 这个是IE9,IE10,和IE11浏览器的bug问题,相信很多用FormsAuthenticationTicket来做验证的都会碰到这个问题..... 我自己的最后的是 <authentication mode="Fo

(十二)easyUI之表单和验证完成登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <% String path = request.getContextPath(); %> <html> <head> <link rel="stylesheet&qu

SharePoint 2010 自定义页面出现“项目可能已被其他用户删除或重命名”问题跟踪

异常详细信息: Microsoft.SharePoint.SPException: 位置 http://portal/Pages/ShowArticle.aspx?id=19&mylist=866e1c61-f4a5-46ec-9773-9bb1caf1109c 处不存在任何项目.项目可能已被其他用户删除或重命名. 解决方式:自定义的页面中,参数名称不能使用ID,List,View等系统已经使用的.调试的时候不会出现什么症状,但是实际部署好后,会随机出现以上错误,请小心使用. 堆栈跟踪: [SP

在 Windows Vista、Windows 7 和 Windows Server 2008 上设置 SharePoint 2010 开发环境

适用范围: SharePoint Foundation 2010 | SharePoint Server 2010 本文内容 步骤 1:选择和预配置操作系统 步骤 2:安装 SharePoint 2010 的必备组件 步骤 3:安装 SharePoint 2010 步骤 4:安装 Visual Studio 2010 和开发人员文档 步骤 5:从已安装的系统创建 Hyper-V 映像 当您创建或自定义 SharePoint 解决方案时,通常最好在安装了 Microsoft SharePoint

Sharepoint 2010升级至 2013

最近做了一个客户的sharepoint升级项目,这里做个简单的share 关于sharepoint 2010升级到2013,网络上也有很多的文章,但是对于sharepoint不是特别熟悉的人来说,升级总是会有怕怕的感觉. 所以备份很重要,就算失败了也能重来啊,除非你经验丰富,能解决各种突发情况. 现场的环境是这样的: 一台 sharepoint 2010 一台  sql 2008 r2 sp1 一台sharepoint 2013 当然,这不是官方推荐的做法,当初是被迫节省时间,所以不做数据库的迁

sharepoint 2010 设置Ribbon中的Tab为默认

在sharepoint 2010中当我们在新标签中打开Item页面的时候,Ribbon中的Tab总是在“视图”这个标签上,而这个标签上的内容都是Item操作性的东西,普通用户一般都没有权限操作,但是为什么还要让普通用户默认这个标签呢,为什么不是“浏览”这个标签呢,“浏览”标签下一般都是我们定制的Banner图片什么的,普通用户只是浏览新闻内容,所有非常没有必要让普通用户默认看到“视图”标签. 有没有什么办法让“浏览”标签默认是选中状态呢?有,肯定是有的,我就发现sharepoint为开发者想的非