Что такое код asp apppackageid


Содержание

Использование Open >

Одним из преимуществ системы разрешений платформы ASP.NET >системы аутентификации на третьей стороне (Third-Party Authentication), через такие сервисы, как Google, Microsoft, Facebook, Twitter, ВКонтакте и т.д. Вы наверняка видели подобные системы аутентификации на многих сайтах, где не нужно проходить процесс регистрации, а достаточно войти в приложение через свой профиль в социальной сети.

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

В современных приложениях, такие системы аутентификации реализуются на основе протоколов OpenID и OAuth, описывающих взаимодействие приложения со сторонней системой. Ниже кратко описаны оба этих протокола и приведены схемы их работы:

OpenID

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

В двух словах, OpenID позволяет входить на множество сайтов используя один аккаунт провайдера, например профиль в социальной сети Facebook или Google+. Например, когда пользователь заходит на ваш сайт, как показано на схеме выше, ему предоставляется выбор провайдера, после чего он перенаправляется на сайт этого провайдера и вводит свои учетные данные. Если он успешно проходит аутентификацию у провайдера, провайдер возвращает вашему сайту успешный OpenID пользователя и вы уже можете его аутентифицировать в своем приложении.

OAuth

Этот протокол используется для авторизации пользователей через другие интернет-ресурсы и, в отличие от OpenID, позволяет предоставить права на использование какого-то ресурса (например, загрузить аватарку пользователя, его email, поменять его стену Вконтакте или использовать другие API-интерфейсы, доступные у провайдера). На рисунке ниже показана схема работы OAuth:

После того, как пользователь прошел аутентификацию в другом сервисе, для него генерируется уникальный токен. Благодаря этому токену вы можете загрузить данные пользователя из этого сервиса, либо выполнить другие манипуляции в аккаунте пользователя (список разрешений, которые требует ваше приложение, отображается при аутентификации).

Пример использования аутентификации Google

ASP.NET Identity имеет встроенную поддержку для работы с протоколами OpenID и OAuth для таких сервисов, как Google, Microsoft, Facebook и Twitter, а также содержит более обобщенную поддержку OAuth для интеграции с любыми другими сервисами. В этой статье в качестве примера мы рассмотрим аутентифкацию через учетную запись в социальной сети Google Plus.

Создание приложения в Google Developer

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

После создания нового проекта вас перенаправит на его начальную страницу, где нужно будет перейти в пункт меню «Учетные данные», после чего перейти во вкладку «Окно запроса доступа Oauth». В этой вкладке указывается ваш email-адрес, название приложения и его логотип (эта информация будет отображаться пользователю при аутентификации на стороне Google).

Нажмите кнопку «Сохранить». Теперь перейдите в левом меню в раздел «Библиотека» и найдите Google+ API, перейдите в меню этого API:

В открывшемся окне необходимо щелкнуть по кнопке «Включить», как показано на рисунке ниже:

После этого отобразится следующее сообщение:

Вам необходимо нажать на кнопку «Создать учетные данные», для настройки доступа OAuth. После этого откроется окно добавления учетных данных, состоящее из трех этапов. На первом этапе указывается тип API (в проекте может использоваться несколько API) и контекст его использования. В нашем примере мы используем Google+ API и вызываем его из веб-браузера (JavaScript):

На втором этапе указываются ограничения по адресу сайта, из которого будет вызываться Google+ API:

Обратите внимание, что я указал ссылки на localhost:4989, в вашем приложении порт будет другим. Также, при развертывании приложения, необходимо будет добавить еще URL-адрес реального веб-сайта. На третьем этапе отобразиться сгенерированный ключ:

Этот ключ является открытым (ClientId). Когда вы нажмете на кнопку «Готово», браузер перенаправит вас на страницу идентификатора клиента в веб-приложении, где отображен также закрытый ключ (ClientSecret). Скопируйте куда-нибудь оба этих ключа, т.к. позже они нам понадобятся.

Настройки приложения

После того, как вы настроили проект OAuth на сайте Google Developer, можно приступить к интеграции сторонней системы аутентификации в своем приложении. Для начала необходимо установить пакет NuGet, добавляющий библиотеки для работы с аутентифкацей Google через Oauth, используя Identity. Выполните следующую команду в окне Package Manager Console:

Есть также еще несколько пакетов NuGet для работы с другими популярными социальными сетями. Они перечислены в таблице ниже:

Пакеты аутентификации NuGet

Проверяет подлинность пользователей через учетную запись Google

Аутентификация пользователей через аккаунт Facebook

Аутентификация пользователей через аккаунт Twitter

Аутентификация пользователей через аккаунт Microsoft

Аутентифкация через любые сервисы, поддерживающие OAuth 2.0

После установки пакета, необходимо включить поддержку аутентификации через стороннее приложение в классе запуска OWIN. Для этого отредактируйте файл IdentityConfig.cs в папке App_Start нашего приложения, как показано в примере ниже:

Каждый из пакетов, которые были перечислены в таблице выше, содержит расширяющий метод, который включает функциональность аутентификации через соответствующий сервис в OWIN. При аутентификации через Google используется метод UseGoogleAuthentication, которому передается объект GoogleOAuth2AuthenticationOptions. В свойствах этого объекта передаются параметры аутентификации. В частности в свойствах ClientId и ClientSecret указываются открытый и закрытый ключи приложения, которые мы сгенерировали ранее.

В свойстве AuthenticationType указывается уникальный идентификатор для экземпляра поставщика аутентификации. Этот идентификатор будет отображаться при запросе свойства Issuer класса утверждения Claim, который мы подробно рассмотрели в предыдущей статье. Благодаря этому параметру можно использовать несколько разных аутентификаций Google, например, используя разные проекты в Google Developer.

Свойство CallbackPath указывает ссылку, на которую будет возвращен пользователь после успешной аутентификации в Google. Важно, чтобы это свойство совпадало с URL перенаправления, который мы указали на втором этапе добавления учетных данных.

Теперь давайте добавим кнопку аутентификации через Google в представление Login.cshtml, находящееся в папке /Views/Account:

Новая кнопка отправляет данные формы методу действия GoogleLogin контроллера Account. Ниже я показал, какие изменения необходимо внести в этот контроллер:

Метод GoogleLogin создает экземпляр класса AuthenticationProperties и устанавливает свойство RedirectUri с адресом перенаправления, который вызывает метод действия GoogleLoginCallback в этом же контроллере. Следующая часть кода магическим образом вызывает ASP.NET Identity, чтобы перенаправлять пользователя на страницу аутентификации Google, а не ту, которая определена в приложении:

Это означает, что когда пользователь нажимает кнопку «Войти с помощью аккаунта Google», его браузер будет перенаправлен на страницу аутентификации Google, а затем обратно перенаправлен на страницу GoogleLoginCallback после того, как он пройдет проверку достоверности.

В методе действия GoogleLoginCallback мы получаем данные о пользователе от Google, используя метод GetExternalLoginInfoAsync, вызываемый на реализации интерфейса IAuthenticationManager:

Класс ExternalLoginInfo сожержит следующие свойства:

Пакет Описание
Microsoft.Owin.Security.Google
Microsoft.Owin.Security.Facebook
Microsoft.Owin.Security.Twitter
Microsoft.Owin.Security.MicrosoftAccount
Microsoft.Owin.Security.OAuth
Свойства класса ExternalLoginInfo

Возвращает имя пользователя

Возвращает адрес электронной почты пользователя

Возвращает объект ClaimsIdentity, связанный с идентификатором пользователям

Возвращает объект UserLoginInfo, который описывает данные при внешнем входе в приложением

Мы используем метод FindAsync класса управления пользователями, для поиска на основе свойства ExternalLoginInfo.Login. Этот метод возвращает объект AppUser, если пользователь ранее уже прошел проверку достоверности в приложении:

Если метод FindAsync не возвращает объект AppUser — это означает, что пользователь впервые аутентифицируется в приложении, поэтому мы создаем новый объект AppUser с данными, полученными от Google и сохраняем нового пользователя в базе данных.

Все что остается для аутентификации — добавить утверждения (claims), ассоциированные с данным пользователем и предоставляемые Google, а также создать аутентифицирующий файл cookie, позволяющий использовать учетные данные в приложении между сессиями:

Тестирование Google-аутентификации

Перед тестированием аутентификации через Google необходимо внести еще одно изменение в приложение: нам нужно отключить пользовательскую проверку пароля, которую мы включили в статье «Валидация данных». Для этого закомментируйте следующие строки в файле класса AppUserManager:

Проверку данных пользователя необходимо оставить, т.к. по умолчанию, в ASP.NET Identity в логине можно указывать только буквы английского алфавита. Напомню, ранее мы добавили класс CustomUserValidator, где отключили эту проверку:

Запустите приложение и нажмите кнопку «Войти с помощью аккаунта Google». Браузер откроет вам страницу Google, где необходимо ввести свои учетные данные:

Когда вы завершите процесс аутентификации, браузер перенаправит вас обратно в приложение. Если теперь открыть страницу с данными по утверждениям /Claims/Index, вы сможете увидеть, как утверждения из системы Google были добавлены к личности пользователя Identity:

Что такое код asp apppackageid


Художника можно определить как невротика, который непрерывно лечится искусством

( Ли Симонсон )

Свойство Описание
DefaultUserName
ExternalIdentity

Создание сайта :
— сегодня уже не роскошь, а необходимый инструмент для эффективной рекламы и продвижения своего товара, продукции, компании.
Созданный сайт, прежде всего, должен обладать профессиональным, стильным web дизайном и клиент всегда должен иметь возможность легко найти необходимую для него услугу или товар.
Мы занимаемся: (разработка сайта, создание сайтов, редизайн сайтов, предоставление хостинга, продвижение сайтов, оптимизация под поисковые системы, создание индивидуального стиля компании, графика, Flash, шаблоны сайтов)
Читать далее

Полезные вещички
HTML (учебник)
Web (веб) статьи
Раскрутка
Web-мастеру
Программы
Рассылка
Главная Студия Услуги НАШИ РАБОТЫ Цены Заказ Контакты Полезное
| Доменное имя | Разное php | Тонкости web | Выбираем хостинг | Библиотека |
Что такое ASP?

Что такое ASP?
Относительно недавно на смену статическим веб-страницам стали приходить динамические — то есть страницы, содержимое которых формируется в зависимости от действия пользователя. Соответственно, потребовался и новый класс приложений, способных формировать такие страницы. Эти приложения получили название серверов веб-приложений.
В начале 1997 года компания Microsoft выпустила 3-ю версию своего веб-сервера (Internet Information Server или IIS), в котором был реализован принципиально новый метод написания серверных приложений. Он получил название ASP (Active Server Pages — активные серверные страницы). Метод является функциональным расширением веб-сервера Microsoft и основан на использовании программных интерфейсов сервера.

По сути ASP — это обычные текстовые файлы (обычно с расширением имени asp), содержащие конструкции языка HTML и сценарии, написанные на языках JScript и/или VBScript, выполняющиеся на сервере наряду с обычным HTML-кодом.

Чем же хороша технология ASP? Прежде всего, возможностью исполнять сценарии на сервере. С помощью сценариев для сервера можно получить доступ к файлам, базам данных и другим ресурсам, хранимым на сервере, а также к централизованным ресурсам сервера, таким как электронная почта или факс-служба.

Функционирование в непротиворечивой и управляемой среде — еще одно преимущество выполнения сценариев на сервере. Ваш код выполняется только на одной версии единственного сервера, а не на множестве версий множества браузеров. Тем самым достигается так называемая кросс-платформенная совместимость.

Сценарии, расположенные в страницах ASP, могут быть не только серверными, но и клиентскими. Серверные сценарии выделяются специальным образом и исполняются на сервере, в то время как клиентские сценарии загружаются вместе с HTML-страницей на компьютер пользователя и работают под управлением браузера, не имея возможности выполнять какие-либо деструктивные функции на стороне клиента.

Новый год детям
Создание сайта. Участие в благотворительном фонде помощь детям.

Что такое API? Простое объяснение для начинающих

Этот краткий термин на слуху у всех, кто хоть как-то сталкивался с разработкой. Но далеко не все понимают, что именно он обозначает и зачем нужен. Разработчик Пётр Газаров рассказал об API простыми словами в своём блоге.

Аббревиатура API расшифровывается как «Application Programming Interface» (интерфейс программирования приложений, программный интерфейс приложения). Большинство крупных компаний на определённом этапе разрабатывают API для клиентов или для внутреннего использования. Чтобы понять, как и каким образом API применяется в разработке и бизнесе, сначала нужно разобраться, как устроена «всемирная паутина».

Всемирная паутина и удалённые серверы

WWW можно представить как огромную сеть связанных серверов, на которых и хранится каждая страница. Обычный ноутбук можно превратить в сервер, способный обслуживать целый сайт в сети, а локальные серверы разработчики используют для создания сайтов перед тем, как открыть их для широкого круга пользователей.

При введении в адресную строку браузера www.facebook.com на удалённый сервер Facebook отправляется соответствующий запрос. Как только браузер получает ответ, то интерпретирует код и отображает страницу.

Каждый раз, когда пользователь посещает какую-либо страницу в сети, он взаимодействует с API удалённого сервера. API — это составляющая часть сервера, которая получает запросы и отправляет ответы.

API как способ обслуживания клиентов

Многие компании предлагают API как готовый продукт. Например, Weather Underground продаёт доступ к своему API для получения метеорологических данных.

Сценарий использования: на сайте небольшой компании есть форма для записи клиентов на приём. Компания хочет встроить в него Google Календарь, чтобы дать клиентам возможность автоматически создавать событие и вносить детали о предстоящей встрече.

Применение API: цель — сервер сайта должен напрямую обращаться к серверу Google с запросом на создание события с указанными деталями, получать ответ Google, обрабатывать его, и передавать соответствующую информацию в браузер, например, сообщение с запросом на подтверждение пользователю.

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

Чем API Google Календаря отличается от API любого другого удалённого сервера в сети?

Технически, разница в формате запроса и ответа. Чтобы сгенерировать полную веб-страницу, браузер ожидает ответ на языке разметки HTML, в то время как API Google Календаря вернёт просто данные в формате вроде JSON.

Если запрос к API делает сервер веб-сайта компании, то он и является клиентом (так же, как клиентом выступает браузер, когда пользователь открывает веб-сайт).

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

Большинство современных сайтов используют по крайней мере несколько сторонних API. Многие задачи уже имеют готовые решения, предлагаемые сторонними разработчиками, будь то библиотека или услуга. Зачастую проще и надёжнее прибегнуть именно к уже готовому решению.

Многие разработчики разносят приложение на несколько серверов, которые взаимодействуют между собой при помощи API. Серверы, которые выполняют вспомогательную функцию по отношению к главному серверу приложения, называются микросервисами.

Таким образом, когда компания предлагает своим пользователям API, это просто означает, что она создала ряд специальных URL, которые в качестве ответа возвращают только данные.

Такие запросы часто можно отправлять через браузер. Так как передача данных по протоколу HTTP происходит в текстовом виде, браузер всегда сможет отобразить ответ. Например, через браузер можно напрямую обратиться к API GitHub (https://api.github.com/users/petrgazarov), причём без маркера доступа, и получить вот такой ответ в формате JSON:

Браузер отлично отображает JSON-ответ, который вполне можно вставлять в код. Из такого текста достаточно просто извлечь данные, чтобы использовать их по своему усмотрению.

Ещё несколько примеров API

Слово «application» (прикладной, приложение) может применяться в разных значениях. В контексте API оно подразумевает:

  • фрагмент программного обеспечения с определённой функцией,
  • сервер целиком, приложение целиком или же просто отдельную часть приложения.

Любой фрагмент ПО, который можно чётко выделить из окружения, может заменять букву «А» в англоязычной аббревиатуре, и тоже может иметь некоторого рода API. Например, при внедрении в код разработчиком сторонней библиотеки, она становится частью всего приложения. Будучи самостоятельным фрагментом ПО, библиотека будет иметь некий API, который позволит ей взаимодействовать с остальным кодом приложения.

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

Аутентификация и авторизация

Введение в аутентификацию и авторизацию

Аутентификация и авторизация в Web API имеет некоторые особенности в отличие от ASP.NET MVC. Здесь фактически нам доступны три вида аутентификации: стандартная через куки, через внешние сервисы и аутентификация с помощью токена.

В то же время Web API и ASP.NET MVC имеют ряд общих моментов.

Так, для ограничения доступа можно применять встроенную реализацию атрибута авторизации — AuthorizeAttribute, который находится в пространстве имен System.Web.Http. Он одновременно проверяет, аутентифицирован ли пользователь в системе, и также проверяет права пользователя на доступ к данному ресурсу (если данный ресурс подразумевает доступ только для определенных ролей иили пользователей). Если пользователь неаутентифицирован, то система посылает в ответ клиенту статусный код 401 (Unauthorized).

В Web API при аутентификации пользователя на сервере создается объект IPrincipal :

Свойство Identity хранит информацию о клиенте:

Данный объект IPrincipal затем прикрепляется сервером к текущему потоку обработки запроса с помощью установки свойства Thread.CurrentPrincipal . При успешной аутентификации пользователя у объекта IPrincipal устанавливается свойство Identity.IsAuthenticated равным true .

Авторизация на основе токенов

Авторизация на основе токенов состоит из нескольких компонентов:

Клиент, который обращается к веб-сервису. Может представлять собой веб-браузер, мобильное приложение, десктопное приложение

Веб-сервис, к ресурсу которого обращается клиент

Токен доступа (access token), наличие которого дает доступ к ресурсам веб-сервиса

Bearer-токен — специальный вид токена доступа

Сервер авторизации, который выдает токены доступа клиенту

Весь процес аутентификации выглядит следующим образом:

Пользователь вводит данные авторизации (логин, пароль) и нажимает на кнопку отправки

Клиент (веб-браузер) отправляет данные серверу авторизации

Сервер авторизации аутентифицирует пользователя и возвращает токен доступа

Для доступа к ресурсу веб-сервиса клиент добавляет в запрос ранее полученный токен доступа

Хотя выше сервер авторизации и веб-сервис, но в реальности они могут быть объединены, как это и происходит в приложении Web API:

Web API применяет спецификацию Oath2, которая описывает механизм аутентификации на основе токенов. Конкретную реализацию этой спецификации представляют компоненты OWIN, благодаря которым и производит генерация токенов, их выдача клиенту и их дальнейшая валидация. Поэтому при создании приложения Web API нам не надо самим реализовывать сервер авторизации, все эти детали, а досточно взять готовый механизм, который предоставляет ASP.NET

Посмотрим на примере, что представляет собой аутентификация токенов. Для этого создадим новый проект Web API с типом аутентификации Individual User Accounts :


Какие узловые моменты этого проекта?

AccountController : контроллер, который содержит ряд методов и функциональностей для управления учетными записями (регистрация, вход на сайт и т.д.)

IdentityModels.cs : файл содержит определение модели пользователей ApplicationUser и контекста данных

IdentityConfig.cs : содержит определение класса ApplicationUserManager , который используется для управления пользователями

ApplicationOAuthProvider : провайдер авторизации, который обеспечивает связь с компонентами OWIN. Он содержит два метода, один из которых — GrantResourceOwnerCredentials() как раз используется для генерации токена

Startup.Auth.cs : содержит настройки инфраструктуры OWIN

Непосредственно к использованию токенов относится следующая часть файла:

Параметр TokenEndpointPath указывает на маршрут для получения токена

Параметр Provider указывает на провайдер авторизации

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

WebApiConfig.cs . В методе Register происходит настройка аутентификации Web API, чтобы она использовала только аутентификацию токенов:

Класс HostAuthenticationFilter подключает аутентификацию токенов, а метод SuppressDefaultHostAuthentication() указывает Web API игнорировать любую аутентификацию, которая происходит до того, как обработка запроса достигнет конвейера Web API. Это позволяет отключить атуентификацию на основе кук, и тем самым защитить приложение от CSRF-атак.

Теперь разберем два момента: получение и валидацию токена. Если требуется получить токен:

Клиент обращается к ресурсу /Token для получения токена

Если в пришедшем запросе есть заголовок «grant_type» и он имеет значение «password», то система вызывает метод GrantResourceOwnerCredentials() у провайдера авторизации ApplicationOAuthProvider

Провайдер авторизации обращается к классу ApplicationUserManager для валидации поступивших данных (логина и пароля) и по ним создает объект claims identity

Если валидация прошла успешно, то провайдер авторизации создает аутентификационный тикет, который применяется для генерации токена

Если клиент обращается к защищенному атрибутом Authorize ресурсу с имеющимся токеном:

Фильтр HostAuthentication обращается к компонентам OAuth для валидации токена

Компоненты OAuth пытаются восстановить по токену объект claims identity

Затем фильтр авторизации смотрит, имеет ли права доступа пользователь, который представлен восстановленным объектом claims identity

Если все прошло успешно, пользователь получает доступ к ресурсу, иначе ему отправляется статусный код 401 (Unauthorized)

ASP.Net — App_Data & App_Code folders?

What is the point of having App_code & App_data folders?

Why doesn’t my objectDataSource detect classes unless files are in App_Code?

Please provide as much detail as you can, I’m new to ASP.Net

3 Answers 3

These folders have special purpose. From this article — ASP.NET Web project folder structure.

App_Code contains source code for shared classes and business objects (for example, ..cs, and .vb files) that you want to compile as part of your application. In a dynamically compiled Web site project, ASP.NET compiles the code in the App_Code folder on the initial request to your application. Items in this folder are then recompiled when any changes are detected.

Note : You can add any type of class file to the App_Code folder in order to create strongly typed objects that represent those classes. For example, if you put Web service files (.wsdl and .xsd files) in the App_Code folder, ASP.NET creates strongly typed proxies for those classes.

Code in the App_Code folder is referenced automatically in your application. The App_Code folder can contain sub-directories of files, which can include class files that in different programming languages.

Каковы все учетные записи пользователей для IIS / ASP.NET и чем они отличаются?

под Windows Server 2008 с ASP.NET 4.0 установлен целый ряд связанных учетных записей пользователей, и я не могу понять, какой из них, как они отличаются, и какой из них действительно тот, под которым работает мое приложение. Вот список:

  • группу iis_iusrs
  • запись iusr
  • DefaultAppPool
  • ASP.NET v4.0
  • NETWORK_SERVICE
  • МЕСТНАЯ СЛУЖБА.

1 ответов

это очень хороший вопрос, и, к сожалению, многие разработчики не задают достаточно вопросов о IIS / ASP.NET security в контексте веб-разработчика и настройки IIS. Вот так.

чтобы покрыть перечисленные идентификаторы:

IIS_IUSRS:

это аналогично старому IIS6 IIS_WPG группы. Это встроенная группа безопасности настроена таким образом, что любой член этой группы может выступать в качестве пула приложений тождественность.

IUSR:

этот счет аналогичен старому IUSR_ локальная учетная запись, которая была анонимным пользователем по умолчанию для веб-сайтов IIS5 и IIS6 (т. е. настроенная на вкладке Безопасность каталога свойств сайта).

подробнее о IIS_IUSRS и IUSR посмотреть:

DefaultAppPool:

если пул приложений настроен для запуска с помощью функции идентификации пула приложений, то «синтезированная» учетная запись называется IIS AppPool\

будет создан на лету, чтобы использовать в качестве удостоверения пула. В этом случае будет синтезированная учетная запись под названием IIS AppPool\DefaultAppPool создано на время жизни бассейна. Если вы удалите пул, эта учетная запись больше не будет существовать. При применении разрешений к файлам и папкам необходимо добавить с помощью IIS AppPool\

. Вы также не увидите эти учетные записи пула в Диспетчере пользователей компьютеров. Дополнительные сведения см. В следующем разделе:

ASP.NET v4.0:

это будет идентификатор пула приложений для ASP.NET v4.0 Пул Приложений. См. DefaultAppPool выше.

NETWORK SERVICE:

на NETWORK SERVICE учетная запись-это встроенный идентификатор представлен в Windows 2003. NETWORK SERVICE — это низко привилегированная учетная запись, под которой вы можете запускать пулы приложений и веб-сайты. Веб-сайт, работающий в пуле Windows 2003, все еще может олицетворять анонимную учетную запись сайта (IUSR_ или что бы вы ни настроили как анонимное удостоверение).

In ASP.NET до Windows 2008 вы могли бы иметь ASP.NET выполнение запросов под учетной записью пула приложений (обычно NETWORK SERVICE ). В качестве альтернативы вы можете настроить ASP.NET к олицетворение анонимной учетной записи сайта через настройка в web.config файл локально (если этот параметр заблокирован, то это должно быть сделано администратором в ).

задание распространен в средах общего хостинга, где используются общие пулы приложений (в сочетании с параметрами частичного доверия для предотвращения расплетения олицетворенной учетной записи).

в IIS7.x / ASP.Управление net impersonation теперь настроено через аутентификацию функция конфигурации сайта. Таким образом, вы можете настроить запуск в качестве идентификатора пула, IUSR или специального анонимного аккаунта.

LOCAL SERVICE:

на LOCAL SERVICE учетная запись-это встроенная учетная запись, используемая диспетчером управления службами. Она имеет минимальный набор привилегий на локальном компьютере. Он имеет довольно ограниченный объем использования:

LOCAL SYSTEM:

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

На Практике:


на практике предпочтительным подход к обеспечению безопасности веб-сайта (если сайт получает собственный пул приложений — что является значением по умолчанию для нового сайта в MMC IIS7) должен выполняться под Application Pool Identity . Это означает установку идентификатора сайта в расширенных настройках пула приложений в Application Pool Identity :

на веб-сайте вы должны затем настроить функцию аутентификации:

щелкните правой кнопкой мыши и отредактируйте анонимную аутентификацию запись:

обеспечить «удостоверение пула приложений» выбран:

когда вы приходите, чтобы применить права доступа к файлам и папкам, вы предоставляете удостоверение пула приложений, какие права требуются. Например, если вы предоставляете удостоверение пула приложений для ASP.NET v4.0 разрешения пула, то вы можете сделать это через Explorer:

нажмите Кнопка «Проверить имена»:

или вы можете сделать это с помощью ICACLS.EXE утилиты:

. или. если пул приложений сайта называется BobsCatPicBlog затем:

я надеюсь, это поможет прояснить ситуацию.

обновление:

я просто наткнулся на этот отличный ответ от 2009 года, который содержит кучу полезной информации, стоит прочитать:

Set the application devsite-toc-embedded >

Every Android app has a unique application ID that looks like a Java package name, such as com.example.myapp. This ID uniquely identifies your app on the device and in Google Play Store. If you want to upload a new version of your app, the application ID (and the certificate you sign it with) must be the same as the original APK—if you change the application ID, Google Play Store treats the APK as a completely different app. So once you publish your app, you should never change the application ID.

Your application >applicationId property in your module’s build.gradle file, as shown here:

When you create a new project in Andro >applicationId exactly matches the Java-style package name you chose during setup. However, the application ID and package name are independent of each other beyond this point. You can change your code’s package name (your code namespace) and it will not affect the application ID, and vice versa (though, again, you should not change your application ID once you publish your app). However, changing the package name has other consequences you should be aware of, so see the section about how to change the package name.

And although the application ID looks like a traditional Java package name, the naming rules for the application ID are a bit more restrictive:

  • It must have at least two segments (one or more dots).
  • Each segment must start with a letter.
  • All characters must be alphanumeric or an underscore [a-zA-Z0-9_].

Note: The application >Context.getPackageName() method returns your application ID. There’s no need to ever share your code’s true package name outside your app code.

Caution: If you are using WebView , consider using your package name as a prefix in your application ID; otherwise you might encounter problems as described in issue 211768.

Change the application ID for build variants

When you build an APK for your app, the build tools tag the APK with the application >defaultConfig block from the build.gradle file (as shown below). However, if you want to create different versions of your app to appear as separate listings on Google Play Store, such as a «free» and «pro» version, you need to create separate build variants that each have a different application ID.

In this case, each build variant should be defined as a separate product flavor. For each flavor ins >productFlavors block, you can redefine the applicationId property, or you can instead append a segment to the default application >applicationIdSuffix , as shown here:

This way, the application ID for the «free» product flavor is «com.example.myapp.free».

You can also use applicationIdSuffix to append a segment based on your build type, as shown here:

Because Gradle applies the build type configuration after the product flavor, the application ID for the «free debug» build variant is now «com.example.myapp.free.debug». This is useful when you want to have both the debug and the release build on the same device, because no two APKs can have the same application ID.

Remember that APKs with different application >versionCode . For more information, read about Multiple APK support.

Caution: For compatibility with previous SDK tools, if you do not define the applicationId property in your build.gradle file, the build tools use the package name from the AndroidManifest.xml file as the application ID. In that case, refactoring your package name also changes your application ID.

Tip: If you need to reference the application >$ placeholder in any manifest attribute. During a build, Gradle replaces this tag with the actual application ID. For more information, see Inject Build Variables into the Manifest.

Change the application ID for testing

By default, the build tools apply an application >.test . For example, a test APK for the com.example.myapp.free build variant has the application >com.example.myapp.free.test .

Although it shouldn’t be necessary, you can change the application >testApplicationId property in your defaultConfig or productFlavor block.

Change the package name

Although your project’s package name matches the application >package attribute in the AndroidManifest.xml file, as shown here:

The Andro >package attribute for two things:

    It applies this name as the namespace for your app’s generated R.java class.

Example: With the above manifest, the R >com.example.myapp.R .

It uses it to resolve any relative class names that are declared in the manifest file.

Example: With the above manifest, an activity declared as is resolved to be com.example.myapp.MainActivity .

As such, the name in the package attribute should always match your project’s base package name where you keep your activities and other app code. Of course, you can have sub-packages in your project, but then those files must import the R.java >package attribute, and any app components declared in the manifest must add the missing sub-package names (or use fully-qualified package names).

If you want to refactor your package name completely, be sure you update the package attribute as well. As long as you use Andro >R class because it’s no longer in the same package, and the manifest won’t identify your activities or other components.)

You must always specify the package attribute in your project’s main AndroidManifest.xml file. If you have additional manifest files (such as for a product flavor or build type), be aware that the package name supplied by the highest-priority manifest file is always used in the final merged manifest. For more information, see Merge multiple manifest files.

One more thing to know: Although you may have a different name for the manifest package and the Gradle applicationId , the build tools copy the application >AndroidManifest.xml file after a build, don’t be surprised that the package attribute has changed. The package attribute is where Google Play Store and the Andro >R class and resolve manifest class names), it discards that value and replaces it with the application ID.

Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.

Discussion for Introduction of new meta-package «Microsoft.AspNetCore.App» #255

Comments

Copy link Quote reply

DamianEdwards commented Jan 30, 2020

This comment has been minimized.

Copy link Quote reply

yang-xiaodong commented Jan 30, 2020

I think packaging Microsoft.AspNetCore.All into the SDK is a very bad decision and one day you guys will remove them from the SDK.

This comment has been minimized.

Copy link Quote reply

jchannon commented Jan 30, 2020

Microsoft.AspNetCore.All is an optional package currently. Are you saying that Microsoft.AspNetCore.App is a requirement for 2.1 apps?

This comment has been minimized.

Copy link Quote reply

dav >Jan 30, 2020


You can always reference individual packages.

This comment has been minimized.

Copy link Quote reply

scottaddie commented Jan 31, 2020

@davidfowl I’m assuming this new metapackage isn’t to be used by apps targeting .NET Framework instead of .NET Core. Is that correct?

This comment has been minimized.

Copy link Quote reply

Eilon commented Jan 31, 2020

@scottaddie yes it’s .NET Core only.

This comment has been minimized.

Copy link Quote reply

DamianEdwards commented Feb 1, 2020

@scottaddie @Eilon actually we’re working with the .NET team to get the linker (trimmer) working on ASP.NET Core applications targeting .NET Framework, so that we can allow the meta-package to work on .NET Framework targeted apps too. This is currently in scope for 2.1, although will not make it for the first preview. We’ll keep folks posted.

This comment has been minimized.

Copy link Quote reply

mungojam commented Feb 3, 2020

Is there an explanation for the reasoning behind this change? I feel there is some interesting background missing

This comment has been minimized.

Copy link Quote reply

DamianEdwards commented Feb 7, 2020 •

@mungojam sorry for the delay, yes indeed there is some more context I’ve been meaning to add. There’s two main things:

  • The new meta-package doesn’t contain packages that we aren’t able to support and/or service (as in, forcibly release patches for e.g. in cases of critical security issues). The three that are included we were unable to remove while keeping the core products functional, but we also don’t anticipate any support or servicability issues with them. In the future (like, 3.0 and beyond) we’ll be taking a modified approach to how we integrate with and ship 3rd party libraries to ensure a clear story for our «default» product experience, i.e. using Microsoft.AspNetCore.App results in your app using MS-supported and servicable bits.
  • The other part is the new meta-package includes version restrictions, such that other packages you might bring in, can’t unintentionally upgrade bits of what’s in Microsoft.AspNetCore.App higher than the version included. This helps to ensure a more reliable experience, as it becomes harder to end up with untested version combinations of related bits being used together in the same app (a large cause of customer issues today, given it often happens completely silently). You’ll still be able to force it in the cases you want to do so (by lifting the affected package references to be direct in your project) but at that point you’re effectively in an unsupported state.

This comment has been minimized.

Copy link Quote reply

mungojam commented Feb 7, 2020

@DamianEdwards thanks, those make sense.

On the second point, that’s an interesting one. What if people are adding later versions for direct use in their projects but don’t realise that the meta package also has a dependency on them? Hoping it would lead to a build warning.

This comment has been minimized.

Copy link Quote reply

DamianEdwards commented Feb 9, 2020

@mungojam indeed NuGet will give you a warning if you force an override of a version range restriction by hoisting the dependency. You can optionally suppress the warning I believe, but by default you’ll be notified you’re going outside the lines.

This comment has been minimized.

Copy link Quote reply

MV10 commented Mar 21, 2020

The other part is the new meta-package includes version restrictions, such that other packages you might bring in, can’t unintentionally upgrade bits of what’s in Microsoft.AspNetCore.App higher than the version included.

Isn’t this going to lead to the same hassles the Azure Functions team is struggling with due to binding redirects? Using any recent version of something as crucial as JSON.NET with Functions v1 is currently very troublesome due to a hard dependency on an old version:

This comment has been minimized.

Copy link Quote reply

DamianEdwards commented Mar 21, 2020

The restrictions are only applied to our packages, so don’t include JSON.NET. Also this is all in your project, so you’re in complete control of the overrides if you wish, unlike the situation on Azure Functions where you don’t control the host and thus can’t unify versions via assembly redirects.

This comment has been minimized.

Copy link Quote reply

MV10 commented Mar 21, 2020

Gotcha. So it’s more a case of, «I’m using ASP.NET Core 2.1.3, so I’m expected to add config extensions 2.1.3,» or whatever specific version is defined, rather than «grab the latest and hope it works.»

This comment has been minimized.

Copy link Quote reply

mholec commented May 6, 2020 •

There is many Microsoft.EntityFrameworkCore.Xxxxx dependencies in this metapackage. In my opinion:

  1. In most projects, it is not typical to have referenced ORM in the ASP.NET Core web project (which have mostly «presentation layer» purpose).
  2. If I want to use EF Core in class library, I have to reference all EF Core packages. What about to create dependency package — something like Microsoft.EntityFramework.All ?

This comment has been minimized.

Copy link Quote reply

shep1987 commented May 8, 2020

I also had to add a reference to Microsoft.AspNetCore.AzureAppServicesIntegration after swapping to .App

This comment has been minimized.

Copy link Quote reply

rguerreiro commented May 28, 2020

@DamianEdwards how are you on supporting this meta-package for the .NET Framework? I’m in the works to change a current ASP.NET Core 2.1 (rc1) to .NET Framework in order to host it inside a windows service. But until now I’m getting the error that the Microsoft.AspNetCore.App is not compatible with net471.


Will this work for the RTM? If not, how do you advice on bypassing it? Remove the reference to the AspNetCore.App meta-package and reference the packages individually?

This comment has been minimized.

Copy link Quote reply

dav >Jun 3, 2020

No the meta package doesn’t support .NET Framework and it won’t for RTM. We don’t have a good way trim the package so your bin folded would contain hundreds of packages.

This comment has been minimized.

Copy link Quote reply

rguerreiro commented Jun 4, 2020

@davidfowl so what’s the best way to self-host a 2.1 asp.net core web app? I know that a windows service was the recommended way, but it seems that now it won’t be possible. Feel free to point me to another project to ask this question.

This comment has been minimized.

Copy link Quote reply

markusschaber commented Jun 4, 2020

This comment has been minimized.

Copy link Quote reply

rguerreiro commented Jun 4, 2020

@markusschaber yes it’s true, but since the meta-package Microsoft.AspNetCore.App (which is the recommended package to use from 2.1 onward) is not supported with the .NET Framework (and won’t be in the near future) I’m not able to convert my current web app from netcoreapp2.1 to net471 which is a step needed to run it as a windows service (as you can see here)

This comment has been minimized.

Copy link Quote reply

markusschaber commented Jun 4, 2020

@rguerreiro AFAICS, the meta-package just pulls in other packages transitively, it has no content on its own.

So it should be possible to just reference the required nuget Packages directly.

This comment has been minimized.

Copy link Quote reply

poke commented Jun 4, 2020

I’m not able to convert my current web app from netcoreapp2.1 to net471

No, you just won’t be able to use the shared framework or meta package. Just reference what you need directly instead. So instead of this:

Metapackages and the shared framework are completely optional. You can always choose to reference your dependencies explicitly instead. That will work on both the full framework and .NET Core.

This comment has been minimized.

Copy link Quote reply

Tratcher commented Jun 4, 2020

.NET Framework is not required to run in a windows service, netcoreapp2.1 should work fine.

This comment has been minimized.

Copy link Quote reply

rihei commented Jun 19, 2020

If I have understood correctly, the Microsoft.AspNetCore.App package is included in the runtime, so the runtime and the App package always have the same version number.
And the runtime version depends on project file’s TargetFramework and possible RuntimeFrameworkVersion, plus what versions are installed in the host environment.

a) How should I select the version for those App-package included packages that I also need in other projects of the same solution?
I have some class libraries that the web app depends on, so do I need to know the exact version of runtime to be able to reference the same version of the common packages in the class libraries? (for example Microsoft.EntityFrameworkCore )

b) What if a newer runtime gets installed to the host? Then the web app references a newer version of the same package than the class library. For example Microsoft.AspNetCore.App v2.1.0 requires the Microsoft.EntityFrameworkCore to be exactly version 2.1.0. (This is different from 2.1.1, which requires most packages to be at least 2.1.1 and less than 2.2.0.)

c) What are the best practices to specify version numbers of the SDK and runtime? For example, I have a web app hosted in Azure App Services, and some class libraries that the web app depends on. Should I always.

  • specify the SDK version in the global.json
  • make sure the (VSTS hosted) build agent has the correct SDK installed (or install it myself in a build step)
  • find out which runtime versions the Azure App Service has installed (by using the Console in Azure portal and typing dotnet —list-runtimes )
  • choose some of these runtimes and specify it in all project files as the RuntimeFrameworkVersion

If I don’t spec the RuntimeFrameworkVersion , the runtime might get updated, and I would have a version mismatch in the packages that are referenced both by the Microsoft.AspNetCore.App and directly from other projects.

If I do spec the RuntimeFrameworkVersion .

  • What happens if the server doesn’t have this one?
    • Probably versions do not disappear from the App Services, so I should be safe if it exists there now?
    • Does the shared framework roll-forward mechanism override my RuntimeFrameworkVersion specification?
  • Apparently Azure App Service does not have the 2.1.1. yet, so I need to specify 2.1.0 as the RuntimeFrameworkVersion . When I some day later realize that the 2.1.1 is installed, I should update the RuntimeFrameworkVersion and all class library packages that are included in the Microsoft.AspNetCore.App .

..or should I even publish a self-contained application?

Почему ASP.NET не используют в крупных компаниях?

В настоящий момент С# (asp.net) имеет целый ряд преимуществ над тем, что нам дает Java (в плане удобства и синтаксиса языка). Это правда!

Проблема заключается в том, что Java появился раньше, Java был открытым для использования на Linux. В итоге под сервера на Java написали огромный список уникальных решений, которые сейчас используют топовые команды (посмотри, что такое хадуп, например). В итоге, компании либо не видели смысла переписывать все на C#, так как уже имели билды на Java, либо не хотели тратить время на разработку того, что уже есть на Java.

Именно по этой причине Microsoft сейчас активно начинает спариваться с Linux и везде кричит, что они его любят.

ASP.Net — папки App_Data & App_Code?

В чем смысл наличия папок App_code и App_data ?

Почему мой объект objectDataSource не обнаруживает классы, если файлы не находятся в App_Code?

Пожалуйста, предоставьте как можно больше деталей, я новичок в ASP.Net

Эти папки имеют особое назначение. Из этой статьи — Структура папок веб-проекта ASP.NET.

App_Code содержит исходный код для общих классов и бизнес-объектов (например. cs и .vb файлы), которые вы хотите скомпилировать как часть вашего приложения. В динамически скомпилированном проекте веб-сайта ASP.NET компилирует код в папке App_Code при первоначальном запросе вашего приложения. Элементы в этой папке затем перекомпилируются, когда обнаружены какие-либо изменения.

Примечание. Вы можете добавить любой тип файла класса в папку App_Code, чтобы создать строго типизированные объекты, которые представляют эти классы. Например, если вы помещаете файлы веб-сервиса (.wsdl и .xsd) в папку App_Code, ASP.NET создает строго типизированные прокси для этих классов.

Код в папке App_Code автоматически ссылается в вашем приложении. Папка App_Code может содержать подкаталоги файлов, которые могут включать файлы классов, которые находятся на разных языках программирования.

Илон Маск рекомендует:  Погружение в HTML5
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL