2013-06-13 2 views
2

Я рассматриваю несколько примеров использования ACS, и они явно заставляют меня чувствовать себя глупо.Azure ACS Set Up in C#

Я смотрел на учебник онлайн кажется все, что мне нужно было следующая строка в конфиге:

httpRuntime requestValidationMode="2.0" 

Но некоторые другие примеры в этом sample project SimpleMVC4 не имел такой линии в его конфигурации. Хуже того, я ничего не видел там, где ссылки на библиотеку ACS все равно.

С другой стороны, образец MVC3 имел кучу тарабарщины, включая запрос ajax на javascript huh !?

public const string HrdPath = "v2/metadata/IdentityProviders.js"; 

    /// <summary> 
    /// Gets the url with its query string representing this request 
    /// </summary> 
    /// <returns></returns> 
    public string GetUrlWithQueryString() 
    { 
     uriBuilder.Path = HrdPath; 
     uriBuilder.Query = parameters.ToQueryString(); 

     return uriBuilder.Uri.AbsoluteUri; 
    } 

и в Raxor View

$("#signIn").click(function() { 
     // 
     // Explicit JSONP callback can be used to do client side caching of identity provider data. 
     // 
     $.ajax({ 
      url: "@Html.Raw(Model.GetUrlWithQueryString())", 
      dataType: "jsonp", 

HUH !?

Посмотрите, могу ли я просто получить простые (идиотские) указатели?

  1. Я полагающаяся сторона
  2. Я получил MVC контроллер действия, я хочу сказать пользователям здесь провайдеры Идентичность (IP), которые они могут использовать, и их соответствующие URL-адреса, а также производящая тоны, которые будут проверены на шаге (3) ниже. Как мне получить код C#?
  3. После этого клиент, ACS, IP выполняются с их бизнесом, мне все равно, что это такое, насколько мне известно, все это между клиентом, ACS и IP. Я должен получить еще один запрос от пользователя. Что мне делать с этим запросом? Как проверить, является ли пользователь кошерным? И что они не фальсифицировали токен с шага (2) выше.

ответ

5

Я тоже пережил подобную боль в недавнем прошлом. Я был совершенно новым новичком, и мне было очень трудно понять все это. Я нашел Pluralsight Courses from Dominick Baier весьма полезным в понимании этих понятий.

Теперь на ваши вопросы.

У меня действие контроллера MVC, я хочу сказать пользователям вот провайдеров идентичности (IP), которые они могут использовать, и их соответствующие URL-адрес , а также генерировать маркера, которые будут проверены на этапе (3), ниже. Как мне получить код C#?

ли смотреть на этот блог для создания страницы входа на вашем конце: https://www.simple-talk.com/cloud/development/creating-a-custom-login-page-for-federated-authentication-with-windows-azure-acs/

Однажды, клиент, ACS, IP сделаны с их бизнесом, я не забочусь что это такое, насколько мне известно, все это между клиентом, ACS и IP. Я должен получить еще один запрос от пользователя. Что мне делать с этим запросом ? Как проверить, является ли пользователь кошерным? И что они не фальсифицировали токен с шага (2) выше.

Я не думаю, что вам нужно было сделать что-то особенное здесь. ASP.Сетевой трубопровод позаботится об этом для вас, установив для свойства IsAuthenticated значение Principal в true. Вот как выглядит мой код в настоящее время (в основном, из сообщения в блоге выше). Для меня все приложение защищено, и по умолчанию пользователь приземляется на домашней странице. Я проверяю, аутентифицирован ли пользователь или нет. Если они не аутентифицированы, я покажу им всех провайдеров удостоверений, настроенных в ACS, и пользователь может войти в систему, используя любой из них. После успешной аутентификации ACS отправляет пользователя обратно на ту же страницу, и на этот раз пользователь аутентифицируется. В моем коде я делаю кучу преобразований претензий, необходимых для моего приложения, если пользователь аутентифицирован.

Контроллер

public ActionResult Index() 
     { 
      if (!ClaimsPrincipal.Current.Identity.IsAuthenticated) 
      { 
       var idpsUrl = "IdentityProvidersUrl Taken from ACS Login Page"; 
       var webClient = new WebClient() 
       { 
        Encoding = Encoding.UTF8, 
       }; 
       var jsonList = webClient.DownloadString(idpsUrl); 
       var acsResult = JsonConvert.DeserializeObject<List<IdentityProvider>>(jsonList); 
       return View(acsResult); 
      } 
      else 
      { 
       var principal = ClaimsPrincipal.Current; 
       var claims = principal.Claims; 
       //If any claims transformation needs to be done, that can be done here. 
      } 
     } 

Посмотреть

@{ 
    ViewBag.Title = "Index"; 
} 


<h2>Index</h2> 

    @foreach (var p in Model) 
    { 
     <p> 
      <a href="@p.LoginUrl">@p.ToString()</a> 
     </p> 
    } 

Модель

public class IdentityProvider 
{ 
    public List<string> EmailAddressSuffixes { get; set; } 
    public string ImageUrl { get; set; } 
    public string LoginUrl { get; set; } 
    public string LogoutUrl { get; set; } 
    public string Name { get; set; } 

    public override string ToString() 
    { 
     return Name; 
    } 
} 
+0

Спасибо за удивительный ответ! +1 и чек. Ты мне очень помог! Если вы не возражаете, ваш ответ привел меня к другому вопросу: http://stackoverflow.com/questions/17081609/how-is-azure-acs-authentication-secured – Alwyn

+0

Я рад, что смог помочь вам вне. У меня тоже такой же вопрос (но слишком боялся спросить :)). Я задал этот вопрос некоторым людям, которые являются экспертами в этой области. Надеюсь, вы получите от них гораздо лучший ответ. –

Смежные вопросы