接前一篇博客《SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用》,当实现混合模式登陆后,接着我们就应该自定义SignIn Page。因为默认的登陆页面实在是太丑了。

回顾

当为SharePoint 2013 WebApplication配置了以混合模式(FBA Authentication和Windows Authentication)登陆后,我们当然可以自定义登陆页面(Sign in Page)。登陆SharePoint 2013 Central Administratio后,找到对应的WebApplication,指定其Sign in Page Url即可,如下所示:

创建自定义登陆页面

  • 首先,为了创建自定义的登陆页,我选择了Application Page,默认将被部署在layouts并和项目名称相同的文件夹中(C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\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('?') == -) ? "?" : "&");
}
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。还有一些注意点,也把我纠结很久,详见我的附件。点击下载

SharePoint 2013混合模式登陆中 使用 自定义登陆页的更多相关文章

  1. 移动设备和SharePoint 2013 - 第5部分:自定义应用

    博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...

  2. 查看 SharePoint 2013 部署到GAC的自定义dll

    在SharePoint 2007和2010中,自定义dll存放在“C:\Windows\assembly\”文件夹中,在Windows资源管理器中可以看到. 但在Sharepoint 2013中,却无 ...

  3. 如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler)

    本文讲述如何在 在SharePoint 2013/2010 解决方案中添加 ashx (HttpHandler). 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩 ...

  4. SharePoint 2013 启用 以其他用户身份登陆(Sign in as different user)

    习惯于SharePoint 2010的用户会发现,SharePoint 2013默认把  以其他用户身份登陆(Sign in as different user)的选项去掉了,这对于开发人员来说很麻烦 ...

  5. SharePoint 2013 图文开发系列之自定义字段

    SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应用中,我们还需要一些功能特殊的字段,下面,我们简单介绍下字段的开 ...

  6. SharePoint 2013 状态机工作流之扩展自定义状态

    当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来 ...

  7. SharePoint 2013 Step by Step——使用自定义的List Template

    Overview 对于企业员工来说,"扁平结构"的LIST是日常操作中经常使用到的,LIST的好处是方便数据的录入以及数据的整理分析,尤其是Quick Edit功能,可以实现快速编 ...

  8. SharePoint 2013在浏览器中打开pdf文档

    在没有安装Office Web Apps的情况下,SharePoint 2013是支持在IE上直接打开pdf和Excel文档的(只能查看,不能编辑,部分Excel会报错). 当然,需要现在管理中心做一 ...

  9. SharePoint 2013 图文开发系列之应用程序页

    在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的 ...

随机推荐

  1. Word模板中的表格处理

    在软件系统中,我们经常要输出一些word ,excel,ppt文档,为了输出结果漂亮美观.输出操作方便快捷,通常要制作一些模板文件,通过对模板文件中的关键信息进行修改,就不用管排版.格式等处理了. 在 ...

  2. git 保存用户名密码

    打开本地的.git/config 加入 [credential] helper = store 保存,第一次需要输入用户名密码,输入一次密码后第二次就会记住密码了不会再提示输入用户名及密码

  3. top高级技能

    默认输入top命令后进入的是交互模式,默认显示的TOP程序界面如下图所示: 我们注意到进程的内存区域数据很长一串,主要是因为这里用的单位是k表示的,我们可以修改显示的单位,在界面上直接输入E可以改变显 ...

  4. Android学习笔记五:四大组件(转)

    转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...

  5. SpringMVC学习笔记七:SpringMVC统一异常处理

    发现有位前辈写得比我从书上看到的还详细,我就不写了,前辈的博文地址如下:  http://blog.csdn.net/eson_15/article/details/51731567

  6. Linux上实现Windows的SQLPlus保存SQL历史记录功能

    在Windows操作系统上,当在DOS命令窗口中运行SQL*Plus的时候,可以使用向上,向下键来跳回之前已经执行过的SQL语句.你可以根据需要修改他们,然后按Enter键重新提交执行. 然而,当在L ...

  7. jackson 中JsonFormat date类型字段的使用

    为了便于date类型字段的序列化和反序列化,需要在数据结构的date类型的字段上用JsonFormat注解进行注解具体格式如下 @JsonFormat(pattern = "yyyy-MM- ...

  8. isset、empty、var==null、is_null、var===null详细理解

    //isset: 判断变量是否被初始化 //它并不会判断变量是否为空,并且可能用来判断数组中元素是否被定义 //听说在数组用isset与array_key_exists高出4倍 $a = " ...

  9. 51单片机和Arduino—闪烁灯实现

        技术:51单片机学习.Keil4环境安装.Arduino环境安装.闪烁灯教程   概述 本文提供51单片机.Arduino单片机入门软件安装和一些需要使用的软件介绍,为后续单片机.嵌入式开发做 ...

  10. Spring-security-Oauth2.0

    上周,我想开发OAuth 2.0的一个实例.我检查了Spring-security-Oauth2.0的样例,OAuth 2提供商sparklr2和OAuth 2客户端TONR .我探索在互联网上了一下 ...