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

[经验分享] SharePoint 2013混合模式登陆中 使用 自定义登陆页

[复制链接]
发表于 2015-9-24 08:40:09 | 显示全部楼层 |阅读模式
  接前一篇博客《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即可,如下所示:
DSC0000.png

创建自定义登陆页面


  • 首先,为了创建自定义的登陆页,我选择了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即可,如下所示:
DSC0001.png


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


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

总结

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


运维网声明 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-117949-1-1.html 上篇帖子: K2与Sharepoint工作流 下篇帖子: SharePoint 2013 图文开发系列之定义站点模板
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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