Project Web Access 2007自定义FORM验证登录实现 zt

2024-04-15 13:32

本文主要是介绍Project Web Access 2007自定义FORM验证登录实现 zt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

Project Server 2007安装后生成的WEB管理网站Project Web Access默认采用Windows验证,并自动将安装时登录系统的计算机管理员指定为Project Web Access的超级管理员,默认端口为80。若安装PWA的计算机机器名为PWAServer, 则可以通过http://PWAServer:80来访问PWA。目前情况是PWA需要在非域环境下使用,用户账户和密码需要使用已有系统用户数据库中的用户名和密码,实现PWA登录用户与已有系统用户的统一管理。

经过阅读资料了解到PWA支持FORM验证机制(事实上是SharePoint Server 3.0支持Windows验证和Form验证,而PWA是基于SharePoint Server 3.0实现的一个SPS网站),该验证机制基于微软的Membership用户管理与登录框架,微软已提供了一个默认的实现,称为SqlMembershipProvider, 通过简单地修改PWAweb.config,并运行几个配置程序,就可以让PWA支持FORM验证(配置过程网上有很多文章讲到)。微软默认实现的缺点是登录用户的用户名和密码信息必须存储在微软默认生成的SQL Server数据库中,而不能自定义存储位置,这显然不能满足之前的要求。

微软的默认实现不能支持用户名密码的自定义存储,看来只有重新实现一个MembershipProvider。后来经过查阅Membership SDK和相关的SPS资料,通过开发自己的MembershipProvider,结合SharePoint Server的配置,最终实现了PWAFORM验证和自定义的用户来源。具体步骤如下:

一、配置Form Authentication Based PWA网站

要让PWA支持FORM登录,SharePoint Server的做法是生成与原网站一摸一样的一套网站,更改新网站的验证方式为允许匿名登录和FORM登录,新网站和原网站页面相同,访问的内容数据库也相同,只是配置的登录模式不同,从而实现同一个PWA,两种登录模式。下面是PWA Form验证网站的配置过程:

1. 进入Share Point 管理中心网站,进入"应用程序管理",点击"SharePoint Web 应用程序管理"下的"创建或扩展WEB应用程序",选择"扩展现有WEB应用程序",进入扩展页面。

2. 界面中首先选择要扩展的Web应用程序,在这里我选择"Share Point – 80"网站,对应的访问链接是http://PWAServer:80

3. 选择新建IIS网站,端口填任意未使用的端口,也可以用默认提供的端口。这里我们选择填81

4. 验证程序选择NTLM,选择允许匿名访问,安全套接字选择否。

5. URL此时自动变成了http://PWAServer:81, 区域选择Internet,确定并保存。

6. 进入"应用程序管理",进入"应用程序安全性"下的"验证提供程序";区域选择"Internet",进入。

7. 验证类型选择"表单",勾选启用匿名访问;

8. 成员身份提供程序名称填配置文件中配置的MembershipProvider名,此处我们填CIMCMember(也可以是其他名称)

9. 角色管理器名称留空。

10. 点击保存按钮保存。

至此我们完成了PWA Form验证网站http://PWAServer:81的配置,但该网站到目前为止还不能访问,还需要为它开发MembershipProvider适配器,将我们自定义的用户名密码数据库同PWA连接起来。下一步我们来做这个事情。

二、开发MemberShipProvider适配器

微软的Membership框架基于接口和面向对象设计,扩展Membership Provider首先需要继承虚基类System.Web.Security.MembershipProviderMembershipProvider实现了若干公共方法、同时也定义了若干虚方法,需要子类来实现它。这些方法主要完成从用户库增删改查用户信息、用户密码信息、验证登陆用户、用户锁定和找回密码等功能。对于PWAForm登录,最终只调用到适配器的一个方法,即


//
//
摘要:
//
验证数据源中是否存在指定的用户名和密码。
//
//
参数:
// username:
//
要验证的用户的名称。
//
// password:
//
指定的用户的密码。
//
//
返回结果:
//
如果指定的用户名和密码有效,则为 true;否则为 false
public abstract bool ValidateUser(string username, string password);

这个方法接收登录用户输入的用户名和密码,返回是否成功登陆的布尔值。很显然,我们只要在这个函数中写自己的验证逻辑,从自己的用户数据库中检索用户名和密码就可以实现登录用户名和密码的对接。具体实现略。

在实现自定义MembershipProvider的过程中,还可以对某些属性进行重载,以控制Membership的某些细节功能,例如:

Int MinRequiredPasswordLength 控制最小输入密码长度,可根据实际情况返回长度

bool EnablePasswordReset 是否允许重置密码。如果返回值为true的话,还需要重载相关重置密码的函数。

bool EnablePasswordRetrieval 是否允许用户找回密码。如果返回值为true的话,还需要重载相关找回密码的函数。

对于其他用不到的方法和属性,直接throw new Exception("The method or operation is not implemented.");

三、配置文件修改

自定义MembershipProvider开发好后,需要配置到PWA中才能使用,以下是配置步骤:

1. 将自定义MembershipProvider编译后形成的dll,连同该dll依赖的其他dll一起,拷贝到http://PWAServer:81网站的bin目录中(默认是C:\Inetpub\wwwroot\wss\VirtualDirectories\81\bin)。

2. 修改http://PWAServer:81网站的web.config文件加入以下配置信息:

<system.web>节中增加红色部分,代码安全策略配置节

<securityPolicy>
<trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
<trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
<!--
自定义安全级别-->
<trustLevel name="Full" policyFile="internal"/>
</securityPolicy>

<system.web>节中的trust安全策略节替换成红色部分

<!--<trust level="WSS_Minimal" originUrl="" />-->
<trust level="Full" originUrl="" />

以上两个节修改了PWA的代码加载安全策略,保证了PWA能正常加载我们开发的代码。

<system.web>节中增加自定义MembershipProvider配置节:

<!--自定义membership配置节-->
<membership defaultProvider="CIMCMember">
<providers>
<add name="CIMCMember" type="Hnas.Net2.PWAExtention.Membership.ImpMembershipProvider, Hnas.Net2.PWAExtention.Membership" portalAppName="CIMCPortal" />
</providers>
</membership>

注意:本节中的配置的Provider nameCIMCMember,必须与第一节中"验证提供程序"配置中指定的成员身份提供程序名称相同,PWA通过此名称来查找和加载MembershipProvider

3. web.config配置文件添加MembershipProvider依赖的其他配置信息,例如访问数据库时用到的数据库访问框架配置信息,连接字符串配置等。此处添加的是我公司自己的数据库访问框架配置信息

<section name="hnas.databaseSettings" type="Hnas.Application.Data.Configuration.DatabaseSettingsSection, Hnas.Application.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />

<!--数据库连接字符串-->
<hnas.databaseSettings>
<add name="IMPPortalServerDB" type="Hnas.Application.Data.SqlClient.SqlDatabase, Hnas.Application.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" connectionString="data source=10.2.57.64\cimcbase;user=user;pwd=hnas_95071000;database=PortalServer" />
</hnas.databaseSettings>

4. 重复以上三步,将dll和配置信息同时添加到http://PWAServer:80网站的目录和配置文件中去。

四、Form登录用户添加

windows验证环境下添加PWA访问用户相同,只有在PWA中建立了相应的用户映射,对应的来自自定义用户库的账号才能够登录PWA。添加PWA FORM验证用户的过程如下:

1. 访问windows验证版本的PWA( http://PWAServer:80/pwa)

2. 进入服务器设置->管理用户,选择新建用户。

3. 勾选"可将用户作为资源分配",可以让添加的用户直接成为PWA企业资源;

4. 填写显示名称,邮件等基本信息;

5. 用户身份验证选择"使用完全限定成员身份提供程序用户名(MembershipProvider:UserAccount)进行 Forms 身份验证",用户登录账户填写的格式为MembershipProvider:UserAccount, MembershipProvider为配置文件中配置的成员身份提供程序名称,UserAccount为自定义用户数据库中的登录账号。此处我们的项目中填的是CIMCMember:youxin

6. 填写其他非必填内容,勾选权限选项,为用户指定PWA使用权限。勾选的时候还可以使用"使用模版设置权限"功能,快速选择预定义角色包含的权限范围;

7. 点击"保存"创建用户。

至此,我们已经创建了名为CIMCMember:youxinFORM登录用户,该用户与我们自定义用户库中的账号youxin相关联。

当我们访问PWA FORM验证网站http://PWAServer:81/pwa下的任意页面时,系统会首先转到登录页面,要求输入用户名和密码。此时输入的用户名只能使用注册用户时输入的用户账号的后半部分,即注册时用的是CIMCMember:youxin,登录时应使用youxin

   

从 <http://www.cnblogs.com/yxin1322/archive/2009/08/26/pwa_formbasedsite_impl.html> 插入

这篇关于Project Web Access 2007自定义FORM验证登录实现 zt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905951

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在