2016-07-29 1 views
0

Прошло несколько лет с тех пор, как я сделал свой собственный проект, и я пытаюсь обвести вокруг себя новый способ делать что-то.WebApi + Authenification. Как это сделать?

Прямо сейчас я хочу, чтобы на сайте был создан сайт, который будет иметь asp.net web api в качестве бэкэнд.

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

Одна вещь, которая меня смущает, - это аутентификация и где она на самом деле происходит.

Какая часть моей заявки выполняет аутентификацию? Это веб-сайт Api или веб-сайт или оба?

Мой сайт будет поддерживать только ouath (google, facebook, Microsoft и т. Д.) И не имеет традиционного экрана входа в систему.

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

Когда они нажмут «создать», он сделает запрос к моему api, просмотрит пользователя в моей базе данных и посмотрит, есть ли у них разрешения на создание нового курса. Если да, пусть они создают его и сохраняют. Если не отклонить его.

Если они не вошли в систему и не попытаются попасть в веб-api, скажем, почтальон, они должны быть отклонены.

Я знаю, что это OWIN для Web api, но я не знаю, нужно ли мне это, а затем что-то вроде OWIN для моего веб-сайта.

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

Как вы, вероятно, можете сказать, что я смущен. Надеюсь, кто-то может помочь мне понять все это.

ответ

0

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

https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-dotnet/

Теперь вы упомянули, что вы хотите использовать Google, FB, MSFT и т. д. в качестве поставщиков удостоверений, поэтому я бы рекомендовал проверить следующий новый продукт, который Microsoft только что включила в общую доступность. Это упрощает интеграцию нескольких IDP (поставщиков удостоверений) в ваше приложение. Он также имеет полные образцы кода, которые помогут вам начать работу.

aka.ms/aadb2c

Просто для общего обучения я настоятельно рекомендую проверить эту ссылку, которая объясняет некоторые теории и основы о лексем, OpenID Connect, и что внутри маркера доступа.

http://connect2id.com/learn/openid-connect

+0

Ваши решения будут работать только на лазурном правильном? – chobo2

+0

Да, вы бы разместили этот материал на Azure. К счастью, для игры вокруг и изначально все эти вещи идентичны, поэтому это хороший способ попробовать. Последнее упоминание относится ко всему. –

1

Это немного сложно, так я собираюсь объяснить, что вы должны сделать.

1) Первое, что нужно использовать поставщику OAuth. Microsoft улучшает Identity Server.

Сервер идентификации предоставит вам авторизацию и аутентификацию на основе openid.

2) Сервер идентификации должен быть скомпилирован в другом проекте и будет создавать 18 таблиц в базе данных для управления пользователями и вашими клиентами.

Клиент - это приложение с доступом, например, Android-приложение, угловое приложение или сервер ресурсов. В зависимости от вашего приложения вы должны выбрать рабочий поток. В сервере личных данных вы можете выбрать между 5 из них

https://github.com/IdentityServer

Идентичность сервер 3 для ASP.NET MVC 4.5+ и сервер идентичности 4 для ASP.NET Ядра 1

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

Для настройки вам ресурсов сервера и понимать связь между обоими, вы должны настроить ваш StartUp.cs с чем-то вроде этого:

public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      // Any connection or hub wire up and configuration should go here 
      var clientId = (string)ConfigurationManager.AppSettings["oauth2.clientid"]; 
      var authority = (string)ConfigurationManager.AppSettings["oauth2.authority"]; 

      app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
      { 
       Authority = authority, 
       ValidationMode = ValidationMode.ValidationEndpoint, 
       RequiredScopes = new[] { clientId }, 
      }); 

      app.UseResourceAuthorization(new AuthorizationManager()); 

     } 


     private void ConfigureOAuth() 
     { 
      var formatters = GlobalConfiguration.Configuration.Formatters; 
      var jsonFormatter = formatters.JsonFormatter; 
      var settings = jsonFormatter.SerializerSettings; 
      settings.Formatting = Formatting.Indented; 
     } 
    } 

Когда вы предоставляете маркер, и вы называете службу по REST вы будете отправьте в свой http-заголовок следующее:

header.add («Авторизация», «Ток-ток»);

Наиболее используемый тип лексема Bearer

Этот маркер обеспечивается сервером личных данных, когда вы делаете Логгина с классом identity.client в C# дает вам удивительный инструмент, чтобы сделать самую трудную часть.

Настройка клиента:

private TokenClient GetTokenClient() 
     { 
      var clientId = (string)ConfigurationManager.AppSettings["oauth2.clientid"]; 
      var clientSecret = (string)ConfigurationManager.AppSettings["oauth2.client-secret"]; 
      var tokenEndPoint = (string)ConfigurationManager.AppSettings["openid.endpoints.token"]; 

      var client = new TokenClient(
       tokenEndPoint, 
       clientId, 
       clientSecret 
      ); 

      return client; 
     } 

Получение Токен:

Route("LoginOAUth")] 
     [HttpPost] 
     public async Task<TokenResponse> LoginOAUth(LoginViewModel credentials) 
     { 
      var result = await GetTokenClient().RequestResourceOwnerPasswordAsync(credentials.Correo, credentials.Password, 
          "offline_access AppNameExample-IdentityClient-morgan"); 

      return result; 
     } 

    public class LoginModel 
    { 
     public string Email { get; set; } 
     public string Password { get; set; } 
    } 

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

В токене вы получаете 2 вида информационных областей и заявок, те области и заявки говорят вам «права на ресурсы» и данные данных пользователя, такие как идентификатор, адрес электронной почты, имя и т. Д. Чтобы прочитать эти атрибуты здесь, пример пользовательского AuthorizationAttribute:

public class AuthorizationManager : ResourceAuthorizationManager 
    { 

     public override Task<bool> CheckAccessAsync(ResourceAuthorizationContext context) 
     { 

      switch (context.Resource.First().Value) 
      { 
       case "claims": 
        return AuthorizeValues(context); 
       default: 
        return Nok(); 
      } 
     } 

     Task<bool> AuthorizeValues(ResourceAuthorizationContext context) 
     { 
      switch (context.Action.First().Value) 
      { 
       case "read": 
        return Eval(context.Principal.HasClaim("role", "api-read")); 
       default: 
        return Nok(); 
      } 
     } 

    } 

Это действительно сложно, и я товар.Обращайте 1 месяца studuying протокол OAuth 2.0 и как работает сервер, удостоверяющий личность. Желаю вам удачи

+0

Все еще немного смущен. Так что мне нужно сделать 2 аутентификации? Один, чтобы позволить им использовать мой webapi и один, чтобы войти в мой api? Также мне нужно сгенерировать эти 18 таблиц, о которых вы говорите? Я пытался избежать таких накладных расходов. – chobo2

+0

Прошу прощения за вас, но это невозможно. Вам требуется только 1 аутентификация Oauth 2.0. Сервер Identity предоставляет вам все библиотеки, nugets и т. Д. Для этого.Прочитайте этот шаг за шагом учебник: Этот парень объяснить все с подробностями: https://www.scottbrady91.com/Identity-Server/Identity-Server-3-Standalone-Implementation-Part-1 – AbelMorgan

+0

Вздох OAuth материал казался более простой назад несколько лет назад, когда он только начался. Мне не понадобилось 18 таблиц, чтобы сделать это (больше таблиц, тогда все мое приложение должно будет запускать мой сайт), мне просто нужно 1 поле в db. – chobo2