Я работаю над небольшим проектом для SharePoint 2010, который позволит пользователям аутентифицироваться с помощью OpenID (и, возможно, более позднего).Аутентификация пользователей без пароля в SharePoint 2010
Как это работает в настоящее время? У меня есть поставщик членства и роли на основе SQL. Моя страница входа использует DotNetOpenAuth для отправки запроса подлинности в конечную точку OpenID. Если я получу положительный ответ, я прочитаю адрес электронной почты из персоны OpenID и создаю сеанс для члена MembershipUser, который имеет этот адрес электронной почты (если я знаю конечную точку, из которой он был). Если этого пользователя не существует, я создаю новый MemberhipUser и сохраняю конечную точку в свойстве comment (чтобы вы не могли просто редактировать свою личность для входа в систему как адрес электронной почты другого человека).
Это работает, но проблема заключается в создании сеанса. Я в настоящее время сделать это с помощью следующего фрагмента кода:
//authenticate
SecurityToken token = SPSecurityContext.SecurityTokenForFormsAuthentication(new Uri(SPContext.Current.Web.Url),userProvider,roleProvider,username,user.GetPassword());
SPFederationAuthenticationModule.Current.SetPrincipalAndWriteSessionToken(token);
Но этот бит работает только, если поставщик членства не шифрует пароли, потому что, как только в зашифрованном виде, я не могу просто прочитать пароль пользователя и использовать его в это способ.
Я надеялся найти способ просто войти в систему, но я не могу найти простой способ сделать это.
Использование
FormsAuthentication.SetAuthCookie(username, false);
Просто создает исключение (я предполагаю, что это потому, что метод для стандартного FBA, а не на основе утверждений FBA но я просто угадываю. Встроенный FBA контроля входа в систему с имя пользователя и пароль работает, хотя.)
System.ArgumentException: Exception of type 'System.ArgumentException' was thrown. Parameter name: encodedValue
at Microsoft.SharePoint.Administration.Claims.SPClaimEncodingManager.DecodeClaimFromFormsSuffix(String encodedValue)
at Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetProviderUserKey(String encodedSuffix)
at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(SPSite site, String name, Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)
at Microsoft.SharePoint.SPWeb.InitializeSPRequest()
at Microsoft.SharePoint.WebControls.SPControl.EnsureSPWebRequest(SPWeb web)
at Microsoft.SharePoint.WebControls.SPControl.SPWebEnsureSPControl(HttpContext context)
at Microsoft.SharePoint.ApplicationRuntime.BaseApplication.Application_PreRequestHandlerExecute(Object sender, EventArgs e)
at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PreRequestExecuteAppHandler(Object oSender, EventArgs ea)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Короче говоря, я хотел бы способ создать маркеры для своих членов без необходимости использовать свой пароль.
У кого-нибудь есть опыт в этом или представление о том, как я могу получить то, что хочу?
Заранее спасибо.