2010-08-06 1 views
1

Мы используем систему единого входа CAS, разработанную Ясигом. И попытка аутентификации пользователей для него на сайте SharePoint 2010. Основная проблема заключается в том, что мы проверяем имя пользователя и пароль пользователя на внешнем сайте, который отправляет «билет» обратно на наш сайт SP2010 по строке запроса. Затем наше приложение проверяет этот билет на систему CAS, чтобы убедиться, что билет действителен. Если билет действителен, мы идем вперед и говорим, что пользователь аутентифицирован. В приложении .NET, в этот момент все, что мне нужно сделать, это назвать это:Проблемы с использованием внешней аутентификации с SharePoint 2010

FormsAuthentication.RedirectFromLoginPage(username, false); 

Затем наш пользователь «имя пользователя» проходит проверку подлинности, и все работает просто отлично. Однако в SharePoint этого недостаточно. Я могу только получить SP 2010 для проверки подлинности моего пользователя, если перед вызовом предыдущей строки, я называю:

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

Очевидно, что это огромная проблема, потому что в этот момент у меня нет пароля. У меня есть только билет от сервера CAS. Мне нужен способ «принудительно» аутентификации пользователя в SharePoint.

ответ

1

Microsoft внес некоторые огромные изменения в пользовательские auth с бета-версией SP2010 в 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); 

SecurityProvider, содержащий ValidateTicket

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

Ваша самая большая проблема может заключаться в написании веб-сервиса, который получает билет и возвращает учетные данные, а не логическое заявление о том, что билет действителен или нет. Удачи!

+0

Беда в том, что другая команда разработчиков пишет услугу, чтобы вернуть билет. Они будут только возвращать билет и ясно дали понять, что они не отправят нам пароль. У нас будет только билет и имя пользователя. – RepDetec

+0

Привет. Мне интересно, какой подход вы предприняли для реализации этого требования. У меня есть аналогичное требование - нужно пройти аутентификацию в SharePoint 2010 без пароля. – obautista

+0

Можете ли вы предоставить реализацию GetClaimsToken? –

Смежные вопросы