Вопрос

Анонимная аутентификация внешних запросов к сервисам

Добрый день, Коллеги.

Имел ли кто дело с реализацией анонимной аутентификации внешних запросов, например, к написанному Вами web-сервису по аналогии с сервисом оценок обращений?

Если да, то у кого получилось это реализовать и каким образом, уж больно интересна данная тема, которой нет на Академии.

У меня такой же вопрос

1 комментарий

Добрый день, Михаил.

Этот функционал разработан для продукта Service, соответственно требует наличия этого продукта в Вашей системе. Инструкция по настройке веб-сервисов, доступных без авторизации:

 

Для того, чтобы реализивать конфигурационный веб-сервис, для обращения к которому не нужно авторизировать пользователя, необходимо:

  • в WebApp\ServiceModel зарегистрировать веб-сервис, в котором будет указан путь к конфигурационному веб-сервису. Например, <Название сервиса>.svc, с содержимым:
<%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.Configuration.<Название сервиса>" %>
  • в WebApp\Web.config добавить:
<location path="ServiceModel/<Название сервиса>.svc">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
    </system.web>
</location>
  • в WebApp\Web.config секции appSettings изменить значение ключа AllowedLocations. В значение добавить:
ServiceModel/<Название сервиса>.svc
  • в конфигурации реализовать веб-сервис. Например:
namespace Terrasoft.Configuration 
{
         using System;
         using System.Runtime.Serialization;
         using System.ServiceModel;
         using System.ServiceModel.Activation;
         using System.ServiceModel.Web;
         using System.Web;
         using Terrasoft.Core;
         using Terrasoft.Web.Common;

 
         [ServiceContract]
         [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
         public class ConfigurationService : BaseService
         {

 
                 private SystemUserConnection _systemUserConnection;
                 private SystemUserConnection SystemUserConnection {
                          get {
                                   return _systemUserConnection ?? (_systemUserConnection = (SystemUserConnection)AppConnection.SystemUserConnection);
                          }
                 }

 
                 [OperationContract]
                 [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
                 public void Post() {
                 }

 
                 [OperationContract]
                 [WebGet(RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
                 public void Get() {
                 }
         }
}
  • в WebApp\ServiceModel\http|https\services.config добавить:
<service name="Terrasoft.Configuration.<Название сервиса>">
  <endpoint name="<Название сервиса>EndPoint"
    address="" 
    binding="webHttpBinding"
    behaviorConfiguration="RestServiceBehavior"
    bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
    contract="Terrasoft.Configuration.<Название сервиса>" />
</service>

Сервис будет доступен по адресу WebApp/<Номер конфигурации>/ServiceModel/<Название веб-сервиса>.svc/<Название веб-метода>

Т.к. пользователь не авторизирован, то UserConnection не будет проинициализирован (Session["UserConnection"] == null).

 

Войдите или зарегистрируйтесь, чтобы комментировать