2010-08-06 62 views
1

我們正在使用由Jasig開發的「CAS」單一登錄系統。並嘗試針對SharePoint 2010網站對用戶進行身份驗證。主要問題是我們正在驗證外部網站上的用戶名和密碼,該網站通過查詢字符串將「票證」發送回我們的SP2010網站。然後,我們的應用程序會根據CAS系統重新驗證此票證以確保票證有效。如果票證有效,我們繼續並說用戶已通過身份驗證。在.NET應用程序,在這一點上我需要做的就是把這個:使用SharePoint 2010的外部身份驗證問題

FormsAuthentication.RedirectFromLoginPage(username, false); 

那麼,我們的「用戶名」用戶進行身份驗證,一切工作好了。然而,在SharePoint中,這還不夠。我只能獲得2010 SP到我的用戶進行身份驗證,如果在調用之前的前行,我呼籲:

SPClaimsUtility.AuthenticateFormsUser(Request.Url, username, password); 

顯然,這是一個巨大的問題,因爲在這一點上,我沒有他們的密碼。我只有CAS服務器的票證。我需要一種方法來「強制」SharePoint中的用戶身份驗證。

回答

1

微軟對自定義身份驗證進行了一些巨大的改變,SP2010 Beta發佈到RTM,因爲我們發現困難的方式。總之,我們基本上得到了相同的挑戰,採用一票作爲認證的手段,我們得到了它的工作:

你customlogin.aspx通常會包含類似

var ticket = SecurityProvider.GetTicketForCurrentUser(Session); 
var credentials = SecurityProvider.ValidateTicket(ticket); 
var username = credentials.Username; 
var password = credentials.Password; 
var securityToken = GetClaimsToken(username, password); 
var fam = Context.ApplicationInstance.Modules["FederatedAuthentication"] as 
        SPFederationAuthenticationModule; 
fam.SetPrincipalAndWriteSessionToken(securityToken); 
SPUtility.Redirect(SPContext.Current.Site.Url, SPRedirectFlags.Trusted, Context); 

含ValidateTicket

的SecurityProvider
public static UserCredentials ValidateTicket(string ticket) 
    { 
     UserCredentials creds = UserWSClient.GetUserCredentials(ticket); 
     return creds; 
    } 

您面臨的最大挑戰可能是編寫一個接受票證的Web服務,並返回證書而不是布爾值,表明票證是否有效。 祝你好運!

+0

問題是,另一個開發團隊正在編寫服務來返回票證。他們只會退還機票,並已明確表示不會將密碼發送給我們。我們只會有票和用戶名。 – RepDetec 2010-09-21 15:55:58

+0

嗨。我想知道你採取了什麼辦法來實現這個要求。我有類似的需求 - 需要無密碼地向SharePoint 2010進行身份驗證。 – obautista 2012-03-13 01:26:50

+0

你可以提供GetClaimsToken實現嗎? – 2012-06-08 18:23:41