ASPNet Identity Authentication Веб-сайт клиента MVC5 - ›Сервер аутентификации -› Сервер веб-API

Я новичок в службах идентификации в сети ASP, и нам требуется следующее требование.

Ниже приводится настройка архитектуры.

1. Сервер приложений

Appsever, имеющий
a. Entity Framework
b. Услуги ASP.Net Web API2 Odata
c. Сервер авторизации

2. Веб-сервер

Приложение ASP.Net MVC 5 (клиент, который обращается к серверу приложений)

Поток должен быть

  1. Приложение MVC5 Cleint с формой входа / регистрации

  2. Во время регистрации / входа в систему информацию необходимо отправить на сервер авторизации на сервере приложений, авторизовать и создать заявки с помощью служб идентификации.

  3. После создания удостоверения на сервере авторизации клиентское приложение должно войти в систему

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

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

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

У меня есть несколько примеров того, как аутентифицироваться на сервере аутентификации и получать токен через OWIN, и с этого токена мы можем безопасно получить доступ к API, но мне нужно, чтобы клиентское веб-приложение должно было войти в систему на основе токена

Я прошел по следующим ссылкам

http://blogs.msdn.com/b/webdev/archive/2013/09/20/understanding-security-features-in-spa-template.aspx

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


person ansari    schedule 29.05.2014    source источник
comment
вы используете службу токенов безопасности?   -  person Larry    schedule 29.05.2014
comment
Да, токен на предъявителя создан с сервера аутентификации. Также, если я знаю, как получить доступ к удостоверению утверждения через этот токен, тоже было бы более полезно   -  person ansari    schedule 30.05.2014
comment
@ansari есть обновления по теме? Я в такой же ситуации. Я могу использовать токен, но не могу извлечь данные в клиентском приложении   -  person Lóri Nóda    schedule 03.08.2014
comment
@ LóriNóda Пожалуйста, проверьте ответ как мой подход. Дайте мне знать, если вам нужны дополнительные разъяснения   -  person ansari    schedule 26.08.2014


Ответы (1)


Я решил эту проблему следующим образом, но не уверен, что это эффективный метод.

  1. После входа в систему и получения токена носителя (этот токен должен быть назначен с идентификатором утверждения, таким как имя пользователя, роль и т. Д.)

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

    [Authorize]
    [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
    [Route("UserInfo")]
    public UserInfoViewModel GetUserInfo()
    {
        var firstname = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("FirstName")).SingleOrDefault();
        var lastname = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("LastName")).SingleOrDefault(); 
    
        var IsApproved = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("IsApproved")).SingleOrDefault();
    
        var userinfo = new UserInfoViewModel
        {
            UserName = User.Identity.GetUserName(),
            FirstName = firstname.Value.ToString(),
            LastName = lastname.Value.ToString(),
            UserApproved = Convert.ToBoolean(IsApproved.Value.ToString()),
            HasRegistered = externalLogin == null,
            LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
        };
    
        return userinfo;
    }
    
  3. От клиента этот актин будет вызываться через токен в качестве заголовка.

  4. Как только мы получили информацию (в строковом формате Json), необходимо сериализовать ее с помощью класса UserInfoViewModel (определяемая пользователем модель просмотра основана на информации, которую мы требуем и отправляем из учетной записи webapi) с помощью сериализатора javascript

  5. Используя эту информацию о модели представления, назначьте их локальному хранилищу и используйте (файлы cookie для моего случая) в качестве идентификатора в локальном хранилище.

  6. сохраняйте выход из системы через webapi, когда вы выходите из веб-приложения.

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

person ansari    schedule 25.08.2014
comment
Кажется, что это рабочий метод, но я думал, что мы можем сделать это с помощью фреймворка (WIF), пока у нас нет лучшего решения, я думаю, мне следует использовать это. В любом случае спасибо за решение. - person Lóri Nóda; 27.08.2014