文档章节

SharePoint 2013混合模式登陆中 使用 自定义登陆页

 木宛城主
发布于 2015/03/02 19:41
字数 995
阅读 5
收藏 0

接前一篇博客《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('?') == -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。还有一些注意点,也把我纠结很久,详见我的附件。点击下载

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 222
码字总数 199010
作品 0
黄浦
私信 提问
SharePoint Server和Office 365之间的混合模式集成概述

正如您可能已经知道的那样,云中的Microsoft Office 365和SharePoint Server 2013/2016内部部署可以通过多种方式协同工作。这些通常被称为混合模式,因为它们将功能集成到SharePoint Online...

惊艳了青春
03/17
0
0
SharePoint 2013技巧分享系列 - 同步Exchange显示高清用户照片

在“SharePoint 2013技巧分享系列 - Active Directory同步显示用户照片”文中介绍了如何同步Active Directory显示用户照片,但是同步完成后,用户照片尺寸和清晰度都不是非常理想。本文将介绍...

冷秋寒
06/29
0
0
sharepoint用户登录方式的修改

关于sharepoint用户登录的问题有2个: 1、使用域用户登录到sharepoint网站时会蹦出来IE的登录窗口,而不是普通网站的那种登录界面,这个可能有人不太习惯; 2、用户登录后不能修改自己的密码...

xulinjun
2010/06/23
0
0
再谈 SharePoint 大局观

前言 我对SharePoint这个产品很有感情,因为曾经有相当长一段时间,在很多个夜深人静、月黑风高的晚上,我都是在和它形影不离,在一个一个项目实践中相爱相杀。今天这个产品早已经不是我最初...

CSharpKit
2017/12/23
0
0
Project Server 2016 新特性

从 IT Pro的角度, Project 2016 主要有如下一些新的特性: 资源预订 资源预订是 Project Server 2016 中的一项新功能,有助于项目经理和资源经理就与项目相关联的特定资源的具体工作量和工作...

冯立超
2017/03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

React和Redux的连接react-redux

通过Redux文档来了解react-redux,在一段时间的实践后准备翻一翻源代码,顺便做些相关的总结。我看的代码的npm版本为v4.0.0,也就是说使用的React版本是0.14.x。 react-redux提供两个关键模块...

前端攻城老湿
21分钟前
0
0
1、Mybatis连接池Context.xml配置

注意: (1)mybatis 3.2 之前 通过 set get 方法 获取相关属性。之后通过属性姓名获取相关关联。 (2)mybatis 映射 优先为 sql 语句中的别名与实体类的属性进行映射。 (3)jndi Java用于调...

KingFightingAn
37分钟前
0
0
Android 界面漩涡扭曲动效实现

背景:之前偶然看到优酷有类似的页面切换动画效果。于是自己也打算来实现下这样的效果。 动效说明:点击界面中的任意位置,界面以点击位置作为中心点,开始以漩涡状态,扭曲,收缩。直到消失...

Carlyle_Lee
47分钟前
2
0
聊聊我怎么系统学习Linux技能并快速提高的

聊聊我怎么系统学习Linux技能并快速提高的 随着电子信息科技时代的发展,学会使用计算机在我们的生活中成为了必不可少的一项技能。而作为计算机中的三大操作系统之一的Linux更是饱受计算机爱...

linuxCool
今天
4
0
Android/Java 获取一个byte[]的真实编码,用于解决乱码问题

来源地址:https://blog.csdn.net/qq_31384551/article/details/81627840 一个byte数组,byte[] buf,是由一个字符串转换来的,如何判断字符串使用的是什么编码? Mozilla的一个组件提供了相应...

她叫我小渝
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部