ASPNet Identity Authentication MVC5 клиентски уеб сайт-›Auth Server-› Web API сървър

Аз съм начинаещ в услугите за самоличност на ASPnet и изискваме следното изискване.

Следва настройката на архитектурата

1. Appserver

Appsever, който има
a. Рамка на обект
b. ASP.Net Web API2 Odata услуги
c. Сървър за оторизация

2. Уеб сървър

Приложение ASP.Net MVC 5 (клиент, който има достъп до сървъра на приложения)

Потокът трябва да бъде

  1. Приложение MVC5 Cliint с формуляр за вход / регистрация

  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. Използвайки тази информация за модела на изгледа, присвоете ги на локално хранилище и използвайте (бисквитки за моя случай) като самоличност на локално

  6. поддържайте и webapi за излизане, когато излизате от уеб приложението.

Моля, уведомете ме, ако имате нужда от повече информация или код

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