Logo

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

photo

2023年04月07日

使用场景

许多应用需要基于表单身份的认证,而不是经典模式认证。基于表单的身份验证(FBA)是一种基于声明的身份验证。SharePoint 2016中的FBA默认登录页面非常简单,只提供了用户名、密码和记住ME选项的简单登录控件。但是许多开发人员希望根据业务需求实现一个定制的登录页面以获得更好的体验或更多的选择。本文仅演示如何创建自定义登录页,并部署到Sharepoint服务器场中运行起来。

实现步骤

  1. 创建Sharepoint项目
  2. 创建自定义登录页
  3. 修改自定义登录页
  4. 修改登录逻辑
  5. 生成并部署自定义登录
  6. 配置应用程序的登录页

创建Sharepoint项目

若未安装sharepoint开发环境,请重新安装VS并添加Sharepoint开发包。在VS2017中创建类型为”Empty SharePoint Project”的解决方案,如下图所示:
Image text

输入项目名称并按“OK”,将提示使用向导来指定要部署自定义登录页的SharePoint站点,如下图所示:

Image text

需要输入web 站点URL进行验证,同时必须选择Deploy as Server Farm解决方案而不是部署为沙箱解决方案(默认选择)。否则,在部署解决方案时会出错,如下图所示:

Image text

最后,在验证站点URL之后,点击完成。

创建自定义登录页

右键项目,添加新项,选择如下图所示:
Image text

输入登录页面名称后,会自动生成代码。

修改自定义登录页

修改登录页,添加用户名和密码的文本框,以及登录按钮,并添加登录方法btnLogin_Click,参考代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   <SharePoint:EncodedLiteral runat="server" text="" EncodeMethod='HtmlEncode'/>
<asp:login id="loginFormsUser" FailureText="" runat="server" width="100%">
<table class="ms-input">
<colgroup>
<col width="25%" />
<col width="75%" />
</colgroup>
<tr>
<td nowrap="nowrap"><SharePoint:EncodedLiteral runat="server" text="" EncodeMethod='HtmlEncode'/></td>
<td></td>
</tr>
<tr>
<td nowrap="nowrap"><SharePoint:EncodedLiteral runat="server" text="" EncodeMethod='HtmlEncode'/></td>
<td></td>
</tr>
<tr>
<td colspan="2" align="right"><asp:button id="login" OnClick="btnLogin_Click" class="loginClass" text="" runat="server" /></td>
</tr>
</table>

修改后运行,结果如下图:
Image text

修改登录

  1. 修改默认继承类(LayoutsPageBase)为System.Web.UI.Page
  2. 实现登录方法btnLogin_Click,登录方法中调用SetFBACookie,将由FBA提供程序自动验证用户身份,并设置Session Token,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
protected void btnLogin_Click(object sender, EventArgs e)
{
var username = this.loginFormsUser.FindControl("UserName") as TextBox;
var password = this.loginFormsUser.FindControl("password") as TextBox;

if (string.IsNullOrEmpty(username.Text))
{
var error = this.loginFormsUser.FindControl("FailureText") as Label;
error.Text = "请输入用户名";
return;
}
else
{
if (string.IsNullOrEmpty(password.Text))
{
var error = this.loginFormsUser.FindControl("FailureText") as Label;
error.Text = "请输入密码";
return;
}
}

try
{
SetFBACookie(HttpContext.Current.Request, username.Text, password.Text);
var returnUrl = Request["ReturnUrl"];
Response.Redirect(returnUrl);
}
catch (Exception ex)
{
var label = this.loginFormsUser.FindControl("FailureText") as Label;
label.Text = ex.ToString();
}
}

private static void SetFBACookie(HttpRequest r, string username, string cookieValue)
{
using (SPSite s = new SPSite(r.Url.AbsoluteUri))
{
SPIisSettings iis = s.WebApplication.IisSettings[SPUrlZone.Default];
SPFormsAuthenticationProvider fap = iis.FormsClaimsAuthenticationProvider;
SecurityToken token = SPSecurityContext.SecurityTokenForFormsAuthentication(new Uri(r.Url.GetComponents(UriComponents.Scheme | UriComponents.HostAndPort, UriFormat.Unescaped), UriKind.Absolute), fap.MembershipProvider, fap.RoleProvider, username, cookieValue, SPFormsAuthenticationOption.PersistentSignInRequest);
SPFederationAuthenticationModule fam = SPFederationAuthenticationModule.Current;
fam.SetPrincipalAndWriteSessionToken(token);
}
}

验证成功后,将自动跳转到首页。

生成并部署

右键项目生成dll, 然后点击部署,将自定义登录部署到相应目录下。在sharepoint 2016 中,登录页将会被部署到目录“Program Files\Common Files\microsoft shared\Web Server Extensions\16\TEMPLATE\LAYOUTS”下:
Image text

配置应用程序的登录页

在管理中心处修改应用程序的身份验证,将登录页由默认修改为自定义登录页:
Image text

文件的具体目录参考上一步部署的相对路径。

测试

浏览器中打开Web Application站点,输入用户名和密码,如下图所示:
Image text

点击登录后进入Web Application站点的主页,如下图所示:
Image text

参考资料

https://www.mssqltips.com/sqlservertip/3873/creating-and-deploying-a-custom-login-page-for-sharepoint-2010-forms-based-authentication/

感谢您的阅读,本文由 Gavinhome Blog 版权所有。如若转载,请注明出处:Gavinhome Blog(http://gavinhome.github.io/2018/09/28/SharePoint基于表单身份验证的自定义登录页/
SharePoint 2016:自定义表单认证(Forms Based Authentication)
matplotlib可视化数据

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!
实现联合身份验证 2023年04月07日

实现联合身份验证项目03/08/202310个参与者反馈本文内容适用于:201320...实现联合身份验证

热门文章

Windows Server IIS+ARR反向代理(配置反向代理服务器) 1.概念说明:反向代理反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相...WindowsServerIIS+ARR反向代理(配置反向代理服务器) 作者:Pastore Antonio
1581 浏览量
ffmpeg 生成水印 1:先要配置ffmpeg的滤镜:参考:https://www.jianshu.com/p/9d24...ffmpeg生成水印 作者:Pastore Antonio
1508 浏览量
C#中List的FindAll方法的正确打开方式 初略的介绍一种常见的List写法,这种写法在3.0以后其实是很简单的,但是在2.0左右的系统运用中还...C#中List的FindAll方法的正确打开方式 作者:Pastore Antonio
1467 浏览量
IntelliJ IDEA 代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 这是在设置IntelliJIDEA...IntelliJIDEA代码字体大小的快捷键设置放大缩小(很实用)(图文详解) 作者:Pastore Antonio
1461 浏览量
Navicat Premium 12.0.22 安装与破解 一、安装  NavicatPremium12.0.22的下载链接:https://pan.ba...NavicatPremium12.0.22安装与破解 作者:Pastore Antonio
1447 浏览量