Как получить информацию о пользователе на контроллере WebAPI после аутентификации с помощью IdentityServer?


person hazjack    schedule 01.07.2015    source источник
comment
Вы когда-нибудь догадывались об этом? Я борюсь с той же проблемой.   -  person stoneMaster    schedule 28.09.2016


Ответы (1)


если вы используете owin, вы можете попробовать этот код.

 var owinUser = TryGetOwinUser();
 var claim= TryGetClaim(owinUser, "email");
 string email = claim.Value;

 private ClaimsPrincipal TryGetOwinUser()
    {
        if (HttpContext.Current == null)
            return null;

        var context = HttpContext.Current.GetOwinContext();
        if (context == null)
            return null;

        if (context.Authentication == null || context.Authentication.User == null)
            return null;

        return context.Authentication.User;
    }

    private Claim TryGetClaim(ClaimsPrincipal owinUser, string key)
    {
        if (owinUser == null)
            return null;

        if (owinUser.Claims == null)
            return null;

        return owinUser.Claims.FirstOrDefault(o => o.Type.Equals(key));
    }
person Serdar Çatalpınar    schedule 02.07.2015
comment
спасибо за ваш ответ, @Serdar. Я могу получить owincontext, как ваш код, но претензии такие же. Есть претензии с типом = область действия и значение = электронная почта, но ни одна с типом = электронная почта, как вы сказали. У вас есть другая идея? - person hazjack; 02.07.2015
comment
Претензии не отправляет информацию по электронной почте. Вы можете добавить претензию (электронную почту) к претензиям при входе в систему - person Serdar Çatalpınar; 02.07.2015
comment
Вход в систему выполняется IdentityServer, я не знаю, что такое электронная почта в моей службе WebAPI. Вы видите в образце клиентского приложения, оно может анализировать из токена всю информацию, включая адрес электронной почты и роли i .stack.imgur.com/mwSCi.png - person hazjack; 02.07.2015
comment
да, это на github github.com/IdentityServer/IdentityServer3/tree/master/source / но я еще не смотрел :) - person hazjack; 02.07.2015
comment
вы найдете функцию входа в систему в приложении идентификации. вы можете редактировать утверждения. /blob/мастер/источник/ - person Serdar Çatalpınar; 02.07.2015
comment
Я нашел этот метод. Можно ли разобрать токен и получить информацию? возможно, клиент OIDC делает это. ты так думаешь ? - person hazjack; 02.07.2015
comment
что такое имя контроллера и имя функции? способ входа? - person Serdar Çatalpınar; 02.07.2015
comment
Вы спрашиваете о ссылке, упомянутой выше? функция является закрытой void IssueAuthenticationCookie(string signInMessageId, AuthenticateResult authResult, bool? RememberMe = null) {...} - person hazjack; 02.07.2015
comment
Пожалуйста, поговорите в этой комнате, если это возможно, с вами @Serdar chat.stackoverflow.com/ номера/82185/ - person hazjack; 02.07.2015
comment
вы можете редактировать эту функцию (IssueAuthenticationCookie). В код добавлены места претензии. вы должны добавить информацию об электронной почте в качестве претензии. Режим отладки, вы можете сделать это... очень просто... - person Serdar Çatalpınar; 02.07.2015