Проблемы с использованием внешней аутентификации в SharePoint 2010 - PullRequest
1 голос
/ 07 августа 2010

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

FormsAuthentication.RedirectFromLoginPage(username, false);

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

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

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

1 Ответ

1 голос
/ 13 сентября 2010

Корпорация Майкрософт внесла некоторые существенные изменения в пользовательскую аутентификацию с бета-версией 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;
    }

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

...