Лабораторная работа Использование федеративной аутентификации в веб-приложении под Windows Azure



Скачать 406.2 Kb.
страница1/4
Дата03.12.2016
Размер406.2 Kb.
Просмотров794
Скачиваний0
ТипЛабораторная работа
  1   2   3   4


PBC205ILL

Лабораторная работа

Использование федеративной аутентификации в веб-приложении под Windows Azure

Содержание


1.Обзор лабораторной работы 3

Данная лабароторная работа предоставляет пошаговую инструкцию по развертыванию веб-приложения в Windows Azure, которое принимает удостоверения от внешнего провадера индентификации (Identity Provider). Схема позволяет абстрагироваться от низкоуровневых задач безопасности и сфокусировать на бизнес логике и возможностях приложения. Предложенную схему можно легко построить за счет использования библиотеки Windows Identity Foundation (WIF), ранее известной под названием Geneva. 3

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

Windows® Azure – облачная операционная система, предоставляющая сервисы и среду для разработки, размещения и управления приложениями на платформе Windows Azure. Платформа предоставляет разработчикам вычислительные мощности и хранилища данных для размещения, масштабирования и управления веб-приложениями через интернет, находящимися в дата центрах Microsoft. 3

Visual Studio содержи набор шаблонов Windows Azure приложений, которые могут быть использованы для разработки ASP.Net приложений (веб-ролей) и рабочих ролей (фоновых сервисов), которые в последующем могут быть опубликованы в облако. Инструменты Windows Azure для Visual Studio включают эмулятор Windows Azure Compute, который позволяет запускать приложения на локальной машине. Инструменты дают возможность попробовать Windows Azure на локальной машине, используя привычные инструменты отладки и разработки, не имея доступа к реальному облаку. 4

Приложения Windows Azure могут быть упакованы с помощью Visual Studio или инструментов командной строки и затем опубликованы в облако через Портал управления Windows Azure. 4

Более подробную информацию можно найти в центре Windows Azure разработчика Русского MSDN или на официальном сайте продукта. 4

Заметка: Данная процедура может потребовать привилегированного режима запуска. Формат .dep ассоциирован с инструментом Dependency Checker во время установки. Дополнительную информацию, относящуюся к установке можно найти в Setup.docx в папке Assets тренировочного комплекта. 5

Заметка: Данная процедура устанавливает само подписанный сертификат. Если у вас уже установлен сертификат с именем CN=localhost, вам необходимо его сохранить и восстановить после завершения процедуры. 5

2.Упражнение 1: использование федеративной аутентификации в Windows Azure 5

Защитить ASP.Net приложения с помощью WIF очень просто. Используя Visual Studio вы кликаете по проекту, запускаете простой мастер, в котором вы указываете необходимого федеративного провайдера партнера, от которого хотите принимать удостоверения, и все готово. У вас даже есть возможность создать локальный тестовый провайдер, который может быть использован во время разработки, пока у вас нет реальных партнеров. 5

В случае Windows Azure вам необходимо выполнить дополнительные простые шаги, которые позволяют произвести необходимые настройки Windows Azure, которые обусловлены особенностями устройства платформы. Например, хранение сертификатов и ссылки, используемые приложением. 6

В данном упражнении вы увидите, как создать Windows Azure веб-роль, настроить её на использование локального STS и изменить Windows Azure проект для запуска в эмуляторе Windows Azure. В итоге вы опубликуете проект в реальном облаке и увидите, что оно по-прежнему работает во всех средах. 6

Данная лабораторная работа иллюстрирует базовые, наиболее распространенные сценарии интеграции WIF и Windows Azure. Например, в качестве реального провайдера аутентификации может быть использован ADFS 2.0. 6

6

Рисунок 6

Резюме по предстоящим шагам данного упражнения. Вы начинаете с того, что создаете ASP.Net веб-сайт (RP – relying party, зависимая сторона) в Windows Azure веб-роли, STS (провайдер аутентификации) для него и устанавливаете между ними связь. Для заключительного тестирования вы публикуете веб-роль в тестовое и рабочее окружение облака. Для упрощения разработки и тестирования на протяжении всей работы используется локальный STS. 6

Запустите Visual Studio 2010 в привилегированном режиме. 7

Создайте новый проект File -> New -> Project 7

В диалоге выберите шаблон Cloud 7

Выберите тип проекта Windows Azure Project 7

Выберите уникальное имя для вашего проекта. Установите имя решения Begin и путь до папки %YourInstallationFolder%\Labs\WindowsAzureAndPassiveFederation\Source\Ex1-AzureFederatedAuthentication\. Убедитесь в том, что выбрана опция Create directory for solution и версия .NET Framework 4. Нажмите OK для создания проекта. 7

7

Рисунок 7

Создание нового Windows Azure проекта 7

В новом Windows Azure Project диалоге раскройте роли для Visual C# и выберите ASP.NET Web Role из списка доступных ролей нажатием стрелки (>) для добавления экземпляра роли в решение. Перед закрытием диалога нажмите на карандаш у выбранной роли и измените её имя на FederatedIdentity_WebRole. Нажмите OK для создания Windows Azure решения. 7

8



8

Рисунок 8

Назначение ролей Windows Azure проекту 8

Создайте само подписанный сертификат для использования SSL веб-сайтом. Для вашего удобства, лабораторная работа содержит скрипт, который выполняет все необходимые действия. Он создает сертификат с указанным вами именем и устанавливает его в LocalMachine/Personal хранилище сертификатов и добавляет его в LocalMachine/Trusted Root Certification Authorities (для предотвращения ошибок в IE при просмотре страниц приложения). Откройте Visual Studio command prompt от имени администратора (Start -> All -> Programs -> Microsoft Visual Studio 2010 -> Visual Studio Tools -> Visual Studio Command Prompt (2010)). 8

Измените текущую директорию на %YourInstallationFolder%\Labs\WindowsAzureAndPassiveFederation\Source\Assets, где папка %YourInstallationFolder%, в которую была установлена лабораторная работа, и запустите CreateCert.cmd скрипт, который принимает в качестве параметра имя вашего проекта. 8

Пример: 9



Visual Studio Command Prompt 9

CreateCert.cmd yourprojectname 9

Во время выполнения скрипта вас попросят ввести пароль для защиты закрытого ключа сертификата. Введите abc!123 и нажмите OK. 9



9

Рисунок 9

Выбор пароля для защиты закрытого ключа 9

9

Рисунок 9

Ввод пароля для установки ключа во второе хранилище 9

Когда вы устанавливаете сертификат в Trusted Root Certification Authorities хранилище, вам покажут предупреждение, на которое нужно ответить Yes для успешной установки сертификата. 9



10

Рисунок 10

Добавление сертификата в trusted root 10

Откройте Solution Explorer и перейдите в /Roles/FederatedIdentity_WebRole. Нажмите правую кнопку мышки и выберите свойства веб-роли. 10

10

Рисунок 11

Изменение свойств FederatedIdentity_Webrole 11

Перейдите в раздел Configuration и убедитесь в том, что выбрана опция Full Trust. 11

11

Рисунок 11

Перейдите на вкладку Certificates и нажмите Add Certificate. 11

11

Рисунок 11

Выбор сертификата 11

Введите имя вашего проекта
в поле Name и нажмите на колонку Thumbprint для выбора сертификата, который был создан на предшествующих шагах. 12


12

Рисунок 12

Выбор сертификата, который был создан ранее 12

На вкладке Endpoints добавьте новую Https точку. Для этого нажмите Add Endpoint и установите следующие значения: 12

12

Рисунок 12

Добавление Https точки 12

Удалите HTTP точку. Выберите существующую точку “Endpoint1” и нажмите Remove Endpoint. 13

13

Рисунок 13

Удаление Http точки 13

Нажмите Ctrl-S для сохранения параметров. 13

В Solution Explorer кликните правой кнопкой мыши по FederatedIdentity_WebRole и выберите Add Reference. На вкладке .NET выберите Microsoft.IdentityModel и нажмите OK. 13

В папке References проекта FederatedIdentity_WebRole выберите Microsoft.IdentityModel и нажмите F4 для открытия свойств. Установите свойству Copy Local значение True и Specific Version значение False. 13

Добавьте необходимые пространства имен в Default.aspx.cs в FederatedIdentity_WebRole. 13

(Code Snippet – Federated Authentication for WebRole Guide – RP Usings) 13



C# 13

using System; 13

using System.Collections.Generic; 13

using System.Linq; 13

using System.Web; 13

using System.Web.UI; 13

using System.Web.UI.WebControls; 14

using Microsoft.IdentityModel.Claims; 14

using System.Threading; 14

Вставьте следующий код в тело функции Page_Load. 14

(Code Snippet – Federated Authentication for WebRole Guide – RP Page_Load Body) 14



C# 14

namespace FederatedIdentity_WebRole 14

{ 14

public partial class _Default : System.Web.UI.Page 14

{ 14

protected void Page_Load(object sender, EventArgs e) 14

{ 14

IClaimsPrincipal icp = Thread.CurrentPrincipal as IClaimsPrincipal; 14

IClaimsIdentity ici = icp.Identity as IClaimsIdentity; 14

Response.Write("Welcome to Fabrikamair

:Claims:
"); 14

foreach (Claim c in ici.Claims) 14

Response.Write(c.ClaimType + "-" + c.Value + "
"); 14

} 14

} 14

} 14

Откройте файл Default.aspx и замените его содержимое на код ниже. 14

ASP.NET 14

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FederatedIdentity_WebRole._Default" %> 14

Замените используемые пространства имен в FederetedIdentity_WebRole в Global.asax на следующие. 14

(Code Snippet – Federated Authentication for WebRole Guide – RP Global.asax Using) 14



C# 14

using System; 15

using System.Collections.Generic; 15

using System.Web; 15

using System.Text; 15

using Microsoft.IdentityModel.Tokens; 15

using Microsoft.IdentityModel.Web; 15

using Microsoft.IdentityModel.Web.Configuration; 15

Добавьте метод WSFederationAuthenticationModule_RedirectingToIdentityProvider с указанным ниже кодом: 15

(Code Snippet – Federated Authentication for WebRole Guide – RP Global.asax RedirectingToIdentityProvider) 15



C# 15

public class Global : System.Web.HttpApplication 15

{ 15

... 15

///

15

/// Retrieves the address that was used in the browser for accessing 15

/// the web application, and injects it as WREPLY parameter in the 15

/// request to the STS 15

///

15

void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 15

{ 15

// 15

// In the Windows Azure environment, build a wreply parameter for the SignIn request 15

// that reflects the real address of the application. 15

// 15

HttpRequest request = HttpContext.Current.Request; 15

Uri requestUrl = request.Url; 15

StringBuilder wreply = new StringBuilder(); 15

wreply.Append(requestUrl.Scheme); // e.g. "http" or "https" 16

wreply.Append("://"); 16

wreply.Append(request.Headers["Host"] ?? requestUrl.Authority); 16

wreply.Append(request.ApplicationPath); 16

if (!request.ApplicationPath.EndsWith("/")) 16

wreply.Append("/"); 16

e.SignInRequestMessage.Reply = wreply.ToString(); 16

} 16



... 16

} 16

Добавьте метод OnServiceConfigurationCreated в Global.asax.cs. 16

(Code Snippet – Federated Authentication for WebRole Guide – RP Global.asax ServiceConfiguration_Created) 16

C# 16

public class Global : System.Web.HttpApplication 17

{ 17

... 17

void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e) 17

{ 17

// 17

// Use the to protect the cookies that are 17

// sent to the client. 17

// 17

List sessionTransforms = 17

new List(new CookieTransform[] { 17

new DeflateCookieTransform(), 17

new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate), 17

new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate) }); 17

SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly()); 17

e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler); 17

} 17



... 17

} 17

Зарегистрируйте обработчик OnServiceConfigurationCreated в методе Application_Start в Global.asax.cs. 17

(Code Snippet – Federated Authentication for WebRole Guide – RP Global.asax Application_Start) 18



C# 18

... 18

public class Global : System.Web.HttpApplication 18

{ 18

void Application_Start(object sender, EventArgs e) 18

{ 18

FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated; 18

} 18

... 18

} 18

19

Рисунок 19

Создание локального STS веб-сайта 19

(Code Snippet – Federated Authentication for WebRole Guide – STS ValidateReplyTo) 19



C# 19

public class CustomSecurityTokenService : SecurityTokenService 19

{ 19

... 19

///

19

/// Validates replyTo and throws an exception if the replyTo refers to a 19

/// RP that is not on the local machine or is not hosted in Windows Azure 19

///

19

///
19

/// The replyTo parameter in the request that came in (RST) 20

///
20

void ValidateReplyTo(string replyTo) 20

{ 20

// if ReplyTo is empty, we have nothing to validate. We will default 20

// to AppliesTo, which is harder to compromise via redirect attack 20

if (!String.IsNullOrEmpty(replyTo)) 20

{ 20

string host = (new Uri(replyTo)).Host.ToLower(); 20

if (!((host == "127.0.0.1") 20

|| (host == "localhost") 20

|| host.EndsWith(".cloudapp.net"))) 20

{ 20

throw new InvalidRequestException( 20

String.Format( 20

"The host in the ReplyTo address {0} is not valid.", 20

host)); 20

} 20

} 20

} 20

///

20

/// This method returns the configuration for the token issuance request. The configuration 20

/// is represented by the Scope class. In our case, we are only capable of issuing a token for a 20

/// single RP identity represented by the EncryptingCertificateName. 20

///

20

///
The caller's principal.
20

///
The incoming RST.


20

/// The scope information to be used for the token issuance. 20

protected override Scope GetScope( IClaimsPrincipal principal, RequestSecurityToken request ) 21

{ 21

ValidateAppliesTo( request.AppliesTo ); 21

... 21



} 21

3. Добавьте вызов метода ValidateReplyTo после ValidateAppliesTo. 21

(Code Snippet – Federated Authentication for WebRole Guide – ValidateReplyTo Call) 21

C# 21

... 21

protected override Scope GetScope( IClaimsPrincipal principal, RequestSecurityToken request ) 21

{ 21

ValidateAppliesTo( request.AppliesTo ); 21

ValidateReplyTo(request.ReplyTo); 21

// 21

// Note: The signing certificate used by default has a Distinguished name of "CN=STSTestCert", 21

// and is located in the Personal certificate store of the Local Computer. Before going into production, 21

// ensure that you change this certificate to a valid CA-issued certificate as appropriate. 21

// 21

Scope scope = new Scope( request.AppliesTo.Uri.OriginalString, SecurityTokenServiceConfiguration.SigningCredentials ); 21

... 21

4. В конце GetScope закомментируйте текущий scope.ReplyToaddress и замените на следующий код. 21

(Code Snippet – Federated Authentication for WebRole Guide – STS Redirect to ReplyTo) 21

C# 21

protected override Scope GetScope( IClaimsPrincipal principal, RequestSecurityToken request ) 21

{ 22

... 22

// Set the ReplyTo address for the WS-Federation passive protocol (wreply). This is the address to which responses will be directed. 22

// In this template, we have chosen to set this to the AppliesToAddress. 22

scope.ReplyToAddress = String.IsNullOrEmpty(request.ReplyTo) ? scope.AppliesToAddress : request.ReplyTo; 22

return scope; 22



} 22

22

Рисунок 22

Первый экран мастера настройки федерации 23

2. Выберите опцию Use an existing STS и укажите путь до файла с мета данными %your inetpub folder%\wwwroot\_sts\FederationMetadata\2007-06\FederationMetadata.xml и нажмите далее. 23



23

Рисунок 23

Второй экран мастера настройки федерации 23

3. Выберите опцию без шифрования No encryption и нажмите далее. 23



24

Рисунок 24

Экран шифрования федерации 24

4. Нажмите далее 24



25

Рисунок 25

Утверждения поддерживаемые STS. 25

5. Нажмите Finish 25



26

Рисунок 26

Заключение 26

6. Добавьте элемент serviceCertificate в Web.config веб-роли. Укажите верный отпечаток сертификата. Его можно найти в ServiceConfiguration.cscfg. 26

(Code Snippet – Federated Authentication for WebRole Guide – ServiceCertificate) 26

XML 26

26

26

... 26

26

26

26

26

26

7. Добавьте элемент certificateValidation с атрибутом certificateValidationMode = None 26

(Code Snippet – Federated Authentication for WebRole Guide – CertificateValidation) 27

XML 27

27

27

... 27

27

27

27



27

8. ASP.NET по умолчанию проверяет все POST запросы к приложению, проверяет все входные параметры. В случае если XML не закодирован, ASP.NET считает его опасным и выдает ошибку. Токен является не шифрованным XML. Для исправления этой ошибки необходимо создать валидатор, который будет проверять токен на его правильность. 27

Добавить SampleRequestValidator.cs из папки Assets в проект FederatedIdentity_WebRole. Добавить в тот же проект в настройки следующие записи. 27

XML 27

... 27

27



27

27

Рисунок 27

Развертывание на локальной машине 27

В данный момент вы полностью готовы для тестирования приложения в Windows Azure эмуляторе. Установите облачный проект как стартовый. Нажмите F5 для сборки и запуска проекта. Браузер откроется на странице https://127.0.0.1:8080. На первом экране вы увидите предупреждение о сертификате. Это происходит потому, что эмулятор использует IP адреса для обращения, а сертификат предназначен для определенного домена. Нажмите продолжить. 28



28

Рисунок 28

Предупреждение о сертификате 28

После подтверждения вы будете перенаправлены на локальный STS. Нажмите Submit. 28



29

Рисунок 29

Страница аутентификации 29

STS издает токен и перенаправляет на веб-роль, размещенную в эмуляторе, WIF проверяет токен и выдает пользователю доступ на сайт. В данном случае используется пассивная форма федерации, в которой токен передается через не видимую автоматически отправляющуюся форму. WIF на стороне STS автоматически создает страницу с этой формой и вызывает её. 29



30

Рисунок 30

Веб-приложение в работе 30

Теперь, когда вы проверили работоспособность приложения в эмуляторе, можно преступить к развертыванию в реальном облаке. 30



30

Рисунок 30

Развертывание в облаке 31

В данном задании вы развернете приложение в тестовом окружении (staging), протестирует его и переместите в конечную, эксплуатационную среду (production). 31

1. Перейдите в браузере на портал http://windows.azure.com и войдите с помощью Live ID. 31

31

Рисунок 31

Вход на портал управления 31

2. Создайте вычислительный компонент, который позволяет запускать код приложений. Для этого создайте новый Hosted Service, нажмите New Hosted Service. 31



32

Рисунок 32

Создание hosted сервиса 32

3. В появившемся диалоге выберите подписку, в которой собираетесь создать сервис. Укажите уникальное имя проекта внутри вашей подписки и url, который будем фактическим адресом доступа к приложению (уникальный в системе). Выберите опцию развертывания Do not deploy и регион размещений Anywhere Europe. 32



33

Рисунок 26 33

Создание нового hosted сервиса 33

4. Нажмите OK и дождитесь завершения процесса подготовки сервиса 33



34

Рисунок 27 34

Успешное развертывание Hosted сервис 34

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

5. В нашем окружении нет необходимого сертификата, необходимо его добавить. Для этого выбираем сервис, папку Certificates и нажимаем Add Certificate. 34

34

Рисунок 28 34

Добавление сертификата 34

Необходимый сертификат находится по адресу %YourInstallationFolder%\Labs\WindowsAzureAndPassiveFederation\Source\Assets\certs\.cloudapp.net.pfx. Для его успешного добавления необходимо ввести пароль, который использовался при его создании. 34



35

Рисунок 29 35

35

Рисунок 30 35

6. Теперь мы готовы к публикации приложения. Для публикации приложения необходимо сделать пакет развертывания со всем кодом и данными. Для этого в Solution Explorer выберите облачный проект и нажмите Publish. В диалоге выберите опцию Create Service Package Only и нажмите OK. 35



36

Создание пакета развертывания 36

7. Развернуть пакет можно с помощью портала, выбрав сервис и нажав New Staging Deployment 36



36

Рисунок 32 36

В диалоге укажите необходимые файлы пакета, которые были созданы на предшествующих этапах и нажмите OK. 36



37

Рисунок 33 37

37

Рисунок 34 38

Необходимо некоторое время для успешного развертывания и инициализации приложения в облаке (обычно это занимает 10 минут). После того как приложение получило статус Ready перейдите по ссылке DNS name. Наше приложение будет располагаться по ссылке вида .cloudapp.net. Теперь вы можете проверить работоспособность приложения. 38



38

Рисунок 35 38

8. После успешного запуска и выполнения приложения в тестовом окружении его можно перенести в эксплуатационную среду. Для этого выберите текущий развернутый пакет и нажмите Swap VIP. 38



39

Рисунок 36 39

Теперь проект развернут и готов к работе. Приложение доступно по адресу https://.cloudapp.net:8080 39



39

Рисунок 38 39

3.Заключение 40

Современные распределенные системы требуют единые механизмы контроля доступа. Одним примером, из которых является система федеративной аутентификации. 40

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





Внимание:

  1. Для выполнения данной лабораторной работы необходима учетная запись Windows Azure

  2. Все описанные в данном документе материалы находятся в каталоге C:\WAPTK\Labs\WindowsAzureAndPassiveFederation \

  3. Пароль для входа в систему: Passw0rd!








  1. Поделитесь с Вашими друзьями:
  1   2   3   4


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал