主页
我的Blog
我的相册
讨论区
文档和列表
搜索
 
海洋工作室 > SharePoint讨论区 > MOSS2007单点登录(SSO)

SharePoint讨论区

我已经设置了匿名可读,如果你要发帖,请点击右上角的登录按钮登录。另外因为现在匿名可读,所以你可以通过RSS来订阅此讨论区。
  
视图: 
文章
开始时间: 2010/4/9 10:40
图片占位符: wangchao.928
wangchao.928
MOSS2007单点登录(SSO)
海洋老师:
    请教一下关于MOSS2007单点登录的问题。我已经有配置开启Microsoft Single Sign-on Service服务,配置“管理单一登录的设置”,配置Google单点登录的邮箱,用VS2008创建了一个项目,添加Web用户控件页面,源代码为
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MeSSO.ascx.cs" Inherits="MeSSO" %>
<asp:Button ID="BtnGoogle" runat="server" Text="Google邮箱=>进入" Width="130px" />
后台代码添加Microsoft.SharePoint.dll,microsoft.sharepoint.portal.dll、Microsoft.SharePoint.Portal.SingleSignon.dll的引用,源代码为:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Portal;
using Microsoft.SharePoint.Portal.SingleSignon;
namespace FirstSSO
{
public partial class MeSSO : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
SSOCanaryChecker.AddCanary(Page);
}
protected void BtnGoogle_Click(object sender, EventArgs e)
{
IntPtr pUserName = IntPtr.Zero;
IntPtr pPassword = IntPtr.Zero;
try
{
ISsoProvider isso = SsoProviderFactory.GetSsoProvider();
SsoCredentials myCreds = isso.GetCredentials("GoogleMail");
pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);
String userName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);
pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);
String Password = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);
string strHTML = "";
strHTML += "<html> ";
strHTML += "<body > ";
strHTML += "<form id='myform' name='myform' method='POST' action='https://www.google.com/accounts/ServiceLoginAuth' > ";
strHTML += "<input type='hidden' name='continue' value='http://mail.google.com/mail?ui=html&amp;zy=l'> ";
strHTML += "<input type='hidden' name='service' value='mail'> ";
strHTML += "<input type='hidden' id='Email' name='Email' value='" + userName + "' > ";
strHTML += "<input type='hidden' id='Passwd' name='Passwd' value='" + Password + "' >";
strHTML += "</form> ";
strHTML += "<script > ";
strHTML += " window.onload=myform.submit(); ";
strHTML += " document.all('Email').value='';document.all('Passwd').value='';";
strHTML += "</script> ";
strHTML += "</body> ";
strHTML += "</html> ";
Response.Write(strHTML);
}
catch (SingleSignonException ex)
{
Response.Write(ex.LastErrorCode);
Response.Write(ex.Message);
}
catch (Exception exx)
{
Response.Write(exx.Message);
Response.Write(exx.InnerException);
}
finally
{
if (IntPtr.Zero != pUserName)
{
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(pUserName);
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(pPassword);
}
}
}
生成后,将FirstSSO项目中生成的FirstSSO.dll拷贝到C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin目录中。将MeSSO.ascx,MeSSO.ascx.cs,MeSSO.ascx.designer.cs拷贝到C:\Inetpub\wwwroot\wss\VirtualDirectories\80\wpresources目录中。用QuickPart用户控件包装器来加载SSO WebPart,但是报错,启用vs2008调试,断点跳到window.onload=myform.submit();这里,然后我将这句改为window.onload=function(){myform.submit();},结果停留在登录页面,是在不解。
是在弄不懂单点登录对第三方系统的登录页面有什么要求?
strHTML += "<form id='myform' name='myform' method='POST' action='https://www.google.com/accounts/ServiceLoginAuth' > ";
strHTML += "<input type='hidden' name='continue' value='http://mail.google.com/mail?ui=html&amp;zy=l'> ";
strHTML += "<input type='hidden' name='service' value='mail'> ";
strHTML += "<input type='hidden' id='Email' name='Email' value='" + userName + "' > ";
strHTML += "<input type='hidden' id='Passwd' name='Passwd' value='" + Password + "' >";
strHTML += "</form> ";
这段程序与第三方系统登录界面有什么关系?
或者请问海洋老师,您有没有比较好的关于单点登录方面的教程供我参考参考,谢谢!
Modify settings and columns