刚装完moss后,配置sso时,出现"您没有执行此操作的权限"的错误,
源文档 <http://www.cnblogs.com/abcdwxc/archive/2008/05/23/1205559.html>
查看系统日志,提示如下内容:
用户 moss-develop\administrator 未能配置单一登录服务器。返回的错误为 0x80630005。请验证此帐户是否拥有足够的权限并重试。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
由以上错误信息可知,moss-develop\administrator没有启动sso的权限,因此怀疑启动sso服务的方式可能是本地系统帐户。打开sso服务,查看登陆方式果真如此。
解决方法如下:
把sso服务的登陆方式更改为域帐户,即MOSS-DEVELOP\Administrator,输入密码,重启sso服务,再去管理中心进行配置就OK了。
源文档 <http://www.cnblogs.com/abcdwxc/archive/2008/05/23/1205559.html>
配置 Microsoft Single Sign-On Service
若要使用单一登录,必须在运行 Windows 操作系统的所有 Web 服务器上安装 Microsoft Single Sign-on (SSO) Service。还必须在运行 Excel Services 的所有服务器上安装 SSO Service。如果使用"业务数据目录"搜索,则还必须在索引服务器上安装 SSO Service。
使用"服务"控制台来配置 SSO Service。配置该服务时,需要使用登录帐户。该登录帐户必须是以下帐户:
- 域用户帐户(而不是组帐户)。
- SharePoint 服务器场帐户。
- 加密密钥服务器上本地 Administrators 组的成员(加密密钥服务器是您在其上启动 SSO Service 的第一台服务器)。
- 运行 Microsoft SQL Server 的计算机上 Security Administrators 组和 DB creator 组的成员。
- 与单一登录管理员帐户相同,或是作为单一登录管理员帐户的组帐户的成员。
源文档 <http://technet.microsoft.com/zh-cn/library/cc262257(office.12).aspx>
微软专家: Oliver Lu
一次登录,资源尽享(Single Sign-On) |
微软专家专题讲座 |
|
很兴奋能够把微软的最新技术和大家一起分享,共同学习共同进步。^_^ |
|
|
Single Sing-On简介
怎样配置Single Sign-On
启用 Single Sign-On
指定 Single Sign-on 和应用程序定义的设置
创建加密密钥
编辑应用程序定义
管理应用程序定义的帐户信息
创建使用SSO技术的Web Part
http://msdn.microsoft.com/library/en-us/dnspts/html/sharepoint_webparttemplates.asp
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Portal;
using Microsoft.SharePoint.Portal.SingleSignon;
//添加引用
using System.Net;
using System.IO;
//重新命名NameSpace为WPHttpRequest
namespace WPHttpRequest
{
[DefaultProperty("Text"),
ToolboxData("<{0}:HttpRequestWebPart runat=server></{0}:HttpRequestWebPart>"),
XmlRoot(Namespace="WPHttpRequest")]
//重新命名Class为WPHttpRequest
public class HttpRequestWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{
//定义私有变量
private const string c_Url = "http://"; //目标URL
private const string defaultText = "";
private string text=defaultText;
private string _myurl = "";
[Category("Custom Properties")]
[DefaultValue(c_Url)]
[WebPartStorage(Storage.Personal)]
[FriendlyNameAttribute("Url")]
[Description("Type the Url here.")]
[Browsable(true)]
[XmlElement(ElementName="Url")]
//定义属性
public string Url //目标URL
{
get
{
return _myurl;
}
set
{
_myurl = value;
}
}
[Browsable(true),Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
//重载RenderWebPart,并调用GetHttpRequestContent获取目标URL的内容
protected override void RenderWebPart(HtmlTextWriter output)
{
this.Text = GetHttpRequestContent(this.Url);
output.Write(Text);
}
//获取远端页面的信息
private string GetHttpRequestContent(string url)
{
string respstr = "";
try
{
Uri contentUrl = new Uri(url);
WebRequest req = WebRequest.Create(contentUrl);
//设置预先验证用户权限
req.PreAuthenticate = true;
//建立网络身份验证
string[] rgGetCredentialData = null;
Credentials.GetCredentials( 1,"SSOApp", ref rgGetCredentialData);
System.Net.NetworkCredential mycredential =
new System.Net.NetworkCredential(rgGetCredentialData[0],rgGetCredentialData[1],rgGetCredentialData[2]);
req.Credentials = mycredential;
//获取远端返回的文件流
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
//以字符串形式读取数据流
respstr = sr.ReadToEnd();
sr.Close();
}
catch (Exception ex)
{
//返回错误信息
return "Error: " + ex.Message;
}
return respstr;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" >
<Title>HttpRequestWebPart</Title>
<Description>HttpRequestWebPart.</Description>
<Assembly>WPHttpRequest</Assembly>
<TypeName>WPHttpRequest.HttpRequestWebPart</TypeName>
<!-- Specify default values for any additional base class or custom properties here. -->
</WebPart>
<?xml version="1.0"?>
<!-- You need to have just one manifest per CAB project for Web Part Deployment.-->
<!-- This manifest file can have multiple assembly nodes.-->
<WebPartManifest xmlns="http://schemas.microsoft.com/WebPart/v2/Manifest">
<Assemblies>
<Assembly FileName="WPHttpRequest.dll">
<SafeControls>
<SafeControl
Namespace="WPHttpRequest"
TypeName="*"
/>
</SafeControls>
</Assembly>
</Assemblies>
<DwpFiles>
<DwpFile FileName="WPHttpRequest.dwp"/>
</DwpFiles>
</WebPartManifest>
添加Web Part
相关文档
源文档 <http://www.microsoft.com/china/community/msspecialist/1.mspx>
MOSS實現SSO(Single Sign-On)第一篇
MOSS技朮 2007-12-21 16:19:43 阅读401 评论0 字号:大中小
一. 實現步驟:
- 啟用SSO服務
- 配制SSO服務器
- 配制SSO加密密鈅
- 創建應用程式定義
- 管理應用程與MOSS帳戶的對應關系
- 開發來實現MOSS與應用程式之間的關聯
註:第二步,第三步必須在服務器上操作,不能使用IE遠端操作
二. 實現方法:
1. 啟用SSO服務
可以采用net start ssosrv來啟用SSO服務(前端服務器,Excel Services服務器,索引服務器上都應該啟用SSO服務)
2. 配制SSO服務器
管理中心 > 作業 > 管理單一登入 > 管理伺服器設定
a. SSO系統管理員帳戶:此為啟用SSO服務的帳戶(必須是網域中的成員)
單一登入 (Single Sign-on) 系統管理員帳戶指定可以建立、刪除或修改應用程式定義的人員集合。管理員帳戶也可以備份加密金鑰。
b. 應用程式定義管理員帳戶:設定應用程式的帳戶(必須是網域中的成員)
企業應用程式定義管理員帳戶可以管理企業應用程式定義的認證,包括變更群組企業應用程式定義的密碼及變更或刪除個別企業應用程式定義的認證。
c. 資料庫設定:可以采用默認(系統會在指定的服務器上創建一個指定的資料庫,默認是SSO資料庫來管理SSO資料)
d. 逾時設定:輸入以分鐘為單位的值,代表單一登入票證過期之前所經過的時間
e. 刪除稽核記錄早於 (天):代表稽核記錄在刪除記錄之前會保留多少天
3. 配制SSO加密密鈅
管理中心 > 作業 > 管理單一登入 > 管理加密金鑰
啟用 Single Sign-On (SSO) 服務的第一個伺服器會變成加密金鑰伺服器
加密金鑰可用來加密和解密儲存在 SSO 資料庫中的認證, 因為加密金鑰能夠保護安全性認證,所以建議您定期建立新的加密金鑰, 每次建立新的加密金鑰時,都必須備份金鑰
4. 創建應用程式定義
管理中心 > 作業 > 管理單一登入 > 管理企業應用程式定義
在單一登入環境中,後端的外部資料來源和系統均稱為企業應用程式。
顯示名稱:輸入顯示給使用者看的名稱
應用程式名稱:輸入網頁組件用來呼叫企業應用程式定義的名稱
例如:輸入" Gmail應用程式"那麼在程式中使用如下
ISsoProvider isso = SsoProviderFactory.GetSsoProvider();
SsoCredentials myCreds = isso.GetCredentials("Gmail應用程式");
連絡人電子郵件地址:使用者可以針對企業應用程式事項進行連絡的電子郵件地址(SSO出問題及失敗時應該找誰聯系)
帳戶類型:
a. 群組:MOSS中的一個群組對應企業應用程式中的一個帳戶
b. 個人:MOSS中的一個人對應企業應用程式中的一個帳戶
c. 使用受限帳戶的群組:使用這個的條件(帳戶是群組帳戶/中介應用程式 (例如商務資料目錄) 會加諸更多安全限制/資料屬於極高機密)
驗證類型:應用程式是否Windows認証
登入帳戶資訊:即表示應用程式登錄所要提供的幾個欄位(例如:有個系統需要用戶,密碼,電子郵件才能登錄,那麼在這里即輸入用戶,密碼,電子郵件三個欄位,在程式中使用如下方法來取得:
myCreds.UserName 用戶名 第一個欄位
myCreds.Password 密碼 第二個欄位
myCreds.Evidence[0] 電子郵件 第三個欄位
) 遮罩選擇是則表示以密文顯示
5. 管理應用程與MOSS帳戶的對應關系
管理中心 > 作業 > 管理單一登入 > 管理企業應用程式定義的帳戶資訊
企業應用程式定義:選擇你需要管理帳戶的企業應用程式
群組帳戶名稱/群組帳戶名稱:MOSS的用戶名及群組名
企業應用程式定義:
- 更新帳戶資訊:第一次或更新用來連接到企業應用程式的認證
- 從此企業應用程式定義刪除此帳戶的儲存認證:刪除這個帳戶在所選企業應用程式的認證
- 從所有企業應用程式定義刪除此帳戶的儲存認證:刪除這個帳戶在所有企業應用程式的認證
6. 開發來實現MOSS與應用程式之間的關聯(這里以連接到Gmail為例)
-
新建一個Web Application在Page的onLoad事件中加入如下代碼
IntPtr pUserName = IntPtr.Zero; //拿來接帳號的
IntPtr pPassword = IntPtr.Zero; //拿來接密碼的
try
{
//取得已定義的SsoCredentials
ISsoProvider isso = SsoProviderFactory.GetSsoProvider();
SsoCredentials myCreds = isso.GetCredentials("Gmail應用程式");
//轉成看得懂的帳號跟密碼
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&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 (SingleSignonCredsNotFoundException ssoe)
{
if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoe.LastErrorCode)
{
//Credentials could not be found 當發生找不到Current User 的Credentials 時發生的錯誤
string strSSOLogonFormURL = SingleSignonLocator.GetCredentialEntryUrl("Gmail應用程式");
Response.Write(User.Identity.Name.ToString() + "您好!<br>" + "SSO TO GMail Fail!<BR><a href=" + strSSOLogonFormURL + " target='_self' >找不到對應的帳號,請點此連結輸入Gmail帳號及密碼!</a><P><input type='button' onclick='javascript:window.close()' value='關閉' />");
}
}
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);
}
}
源文档 <http://blog.163.com/szmax_limin/blog/static/581828612007112141943270/>