SharePoint2010单点登录
来源:互联网 发布:华强北手机间谍软件 编辑:程序博客网 时间:2024/06/16 07:58
1.进入管理中心》应用程序管理
2.找到 Secure Store Service 应用程序代理
3.然后就是新建了
5.输入网站集管理员
6.这个时候SharePoint就知道你需要给OA这个系统做单点登录了。
7.下一步就是我们要把我们进OA系统的帐号密码告诉SharePoint,让他记住当前登录域账户所存的OA账户。
8.下面我们模拟一下OA系统登录页面
<body>
<form id=form1action='dologin.aspx'>
<input type='text'name='name'/>
<input type='password'name='pwd'/><inputtype='submit' value='login'/>
</form>
</body>
</html>
9.OA的主页是http://OA/index.aspx 这是一个简单的登录页面代码,我们从代码得知,
这个form要提交的页面是 http://OA/dologin.aspx ,
登录名name
密码pwd
那我们登录也需要这几个元素。在我们的moss中创建一个列表SSOList。
应用程序名称,就是一个显示用的,好让你知道是啥系统,SSPkey就是我们前面创建的OA 唯一标识。。。你懂得。
那下一步我们就该写代码了。
先整理下思路,我要先在SSOList这个列表中读出来我们登录的系统。
比如读取列表 然后拼出来,这个你懂得,我就不写了。
我们有OA的登录信息了,也有在管理中心建立OA了,那一步我们是不是改往SSO里面存储登录的帐号密码了?
比如我们OA的账户:zhangsan密码:123456
这个时候我们创建一个webpart。然后创建一个应用程序页面 aspx。
这个页面是专门来存账户和密码的
/// 在SSO中存储当前登录用户的配置的第三方系统单点登录的帐号和密码
/// </summary>
/// <param name="ssosetting"></param>
private void InsertSSO(string ssokey,string loginname,string loginpwd)
{
string userloginname = SPContext.Current.Web.CurrentUser.LoginName;
if (!string.IsNullOrEmpty(ssokey) && !string.IsNullOrEmpty(loginname) && !string.IsNullOrEmpty(loginpwd))
{
string[] userinfo = { loginname, loginpwd};
SetUserCredentials(ssokey, userinfo, userloginname);
}
}
/// <summary>
/// 设置指定用户的登陆凭据
/// </summary>
/// <param name="appId">业务系统标识</param>
/// <param name="userInfo">凭据信息</param>
/// <param name="userLoginName">MOSS登陆帐号: domainName\LoginName</param>
public staticvoid SetUserCredentials(string appId,string[] userInfo, string userLoginName)
{
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
List<SecureStoreCredential> creds = new List<SecureStoreCredential>();
SecureStoreCredential name = new SecureStoreCredential(toSecureString(userInfo[0]), SecureStoreCredentialType.UserName);
SecureStoreCredential pwd = new SecureStoreCredential(toSecureString(userInfo[1]), SecureStoreCredentialType.Password);
creds.Add(name);
creds.Add(pwd);
SecureStoreCredentialCollection credes = new SecureStoreCredentialCollection(creds.ToArray());
SecureStoreServiceProxy proxySs = new SecureStoreServiceProxy();
SPContext.Current.Site.AllowUnsafeUpdates = true;
SPContext.Current.Web.AllowUnsafeUpdates = true;
SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
ISecureStore store = proxySs.GetSecureStore(context);
SPClaim claim = SPClaimProviderManager.Local.ConvertIdentifierToClaim(userLoginName, SPIdentifierTypes.WindowsSamAccountName);
store.SetUserCredentials(appId, new SecureStoreServiceClaim(claim), credes);
});
}
catch { }
}
这个方法就会把你当前登录人对应OA的账户密码储存在moss的OA里面
OK,现在账户也存储了,列表也有了。下一步就是登录了。
在新建一个页面SSOSignOn.aspx
我们不是把列表里面的数据读出来了吗?下一步点这个OA连接跳转到SSOSignOn.aspx页面。
需要传几个参数,登录请求页面,账户的name值。密码的name值。登录成功后跳转的页面。虽然我们登录后,OA系统会自动跳转到登录成功页面,
之所以这么做。是因为我们的单点登录不是都要登录OA首页的,比如我们要直接登录到OA的其他功能模块
这个时候我们就不能登录成功后,还到OA首页了吧。
言归正传,我们SSOSignOn.aspx页面要处理些什么呢?
模拟OA的登录页面登录
SSOSignOn页面代码
cs文件代码
private string appname = string.Empty;
public string AppName//SSOKey
{
get
{
if (this.appname == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["appname"]))
this.appname = this.Request.QueryString["appname"];
return this.appname;
}
}
private string gotourl = string.Empty;
public string GotoUrl//登录请求地址
{
get
{
if (this.gotourl == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["gotourl"]))
this.gotourl = HttpUtility.UrlDecode(this.Request.QueryString["gotourl"]);
return this.gotourl;
}
}
private string detailurl = string.Empty;
public string DetailUrl//登录成功后跳转的地址
{
get
{
if (this.detailurl == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["detailurl"]))
this.detailurl = HttpUtility.UrlDecode(this.Request.QueryString["detailurl"]);
return this.detailurl;
}
}
private string parmLoginName = string.Empty;
public string ParmLoginName//帐号name参数
{
get
{
if (this.parmLoginName == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["pname"]))
this.parmLoginName = this.Request.QueryString["pname"];
return this.parmLoginName;
}
}
private string parmPassword = string.Empty;
public string ParmPassword//密码name参数
{
get
{
if (this.parmPassword == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["ppwd"]))
this.parmPassword = this.Request.QueryString["ppwd"];
return this.parmPassword;
}
}
private string _isHaveSSO = string.Empty;//sso里面是否存在账户和密码
public string IsHaveSSO {
get {
return this._isHaveSSO;
}
}
/// <summary>
/// 获取单点登陆业务系统中当前用户的信息
/// </summary>
/// <param name="appId">业务系统标识</param>
/// <returns></returns>
public static List<string> GetUserCredentialCollection(string appId)
{
List<string> credentialList = new List<string>();
SecureStoreProvider prov = new SecureStoreProvider();
SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
prov.Context = context; //当前上下文信息,以便从上下文中找到当前登陆用户
try
{
SecureStoreCredentialCollection cc = prov.GetCredentials(appId);
for (int i = 0; i < cc.Count; i++)
{
ISecureStoreCredential c = cc[i];
IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(c.Credential);
string sDecrypString = System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr);
credentialList.Add(sDecrypString);
}
}
catch
{
}
return credentialList;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> userInfoList =null;
try
{
userInfoList = GetUserCredentialCollection(this.AppName);
}
catch (Exception)
{
this.LabMsg.Text += "用户凭据未设置,请在管理中心中设置!";
}
if (userInfoList.Count >= 2)
{
this.UserName.Value = userInfoList[0];
this.PassWord.Value = userInfoList[1];
_isHaveSSO = "true";
}
else
{
_isHaveSSO = "false";
}
}
}
原文地址:http://blog.chinaunix.net/uid-26727976-id-3132023.html
- SharePoint2010单点登录
- SharePoint2010单点登录
- SharePoint2010单点登录(转)
- SharePoint2010 自定义代码登录方法
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- 单点登录
- //------------单点登录
- 单点登录
- 单点登录
- STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】
- GWT2.5开发环境介绍
- ubuntu的KDE桌面安装
- No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]
- struts1相关知识点(自用)
- SharePoint2010单点登录
- Extjs css
- spring配置datasource三种方式
- Microsoft 环回适配器安装
- Notepad++使用教程
- Java内存泄露的理解与解决
- js定时器
- Attempted to lock an already-locked dir
- php常用函数