Как я могу поделиться своей идентичностью asp.net с веб-сервисом с поддержкой ajax - PullRequest
4 голосов
/ 12 октября 2010

У меня есть приложение Asp.net с аутентификацией в режиме форм

<authentication mode="Forms">
  <forms loginUrl="Login.aspx" />
</authentication>

Я также создал веб-сервис с поддержкой Ajax для поддержки функции голосования на странице.

  <system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="VoteServiceAspNetAjaxBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="VoteService">
    <endpoint address="" behaviorConfiguration="VoteServiceAspNetAjaxBehavior"
      binding="webHttpBinding" contract="VoteService" />
  </service>
</services>

в реализации сервиса, мне нужно получить удостоверение asp, чтобы выяснить, кто голосует ...

[OperationContract]
public int VoteForComment(Guid commentId)
{
    string UserName = ServiceSecurityContext.Current.PrimaryIdentity.Name;
    //...
}

Но даже после входа в aspприложение, ServiceSecurityContext.Current является нулевым.

Можно ли настроить веб-сервис таким образом, чтобы он мог использовать идентичность asp?Альтернативно, возможно ли определить текущего пользователя другим способом?


Редактировать Оказывается, действительно легко, aspNetCompatabilityEnabled = "true" означает, что веб-сервис имеет доступ ко всемнормальное состояние, доступное в Asp.Net, мне просто нужно было использовать пространство имен System.Web .... System.Web.HttpContext.Current.User.Identity.Name

1 Ответ

2 голосов
/ 12 октября 2010

Мой лучший выбор - использовать олицетворение в web.config.

<identity impersonate="true"/>
<authentication mode="Forms" />

это даст вам Имя, предоставленное пользователем в httpContext и в текущей теме.

WindowsPrincipal winPrincipal = (WindowsPrincipal) Thread.CurrentPrincipal ();

надеюсь, это поможет

Рауты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...