Identity 2.0: создание пользовательского ClaimsIdentity, например: User.Identity.GetUserById <int> (int id) для проверки каждого запроса

Смотрите этот похожий вопрос:Требуется доступ к дополнительным пользовательским свойствам в User.Identity

Я хотел бы создать собственные методы аутентификации для использования со своими Razor Views, которые обеспечивают легкий доступIdentityUser свойства, относящиеся к объекту User.Identity, но я не уверен, как это сделать. Я хочу создать несколько пользовательских расширений, похожих наUser.Identity.GetUserName(), User.Identity.GetUserById()и т.д ... вместо того, чтобы использовать этоViewContextExtension метод. Мой тип аутентификации в настоящее время является типом по умолчаниюDefaultAuthenticationTypes.ApplicationCookie из шаблона VS2013 MVC5. Как заявил Shoe, мне нужно вставить эту заявку после того, как пользователь войдет в систему.

Мои вопросы:

Как и где вы создаете пользовательское утверждение, которое имеет выходной параметрthis IIdentity под IPrincipal?

Это позволило бы мне получить доступ к свойствам пользователя через CookieAuthentication в представлении для сущностей в настройке DDD, где у меня есть несколько DbContexts в одном приложении с использованием Identity 2.0. В конечном итоге я буду использовать WebAPI, но сейчас я хочу сделать его как можно более простым. я нашелэто так Q & A но он ориентирован на веб-формы с использованием билетов. Не уверен, что разница между билетами и токенами тоже?

Это текущий подход, который используетViewContext с базового контроллера:

Посмотреть:

    @using Microsoft.AspNet.Identity
    @using Globals.Helpers
    @using Identity //custom Identity for Domain
    @using Microsoft.AspNet.Identity.Owin

    @if (Request.IsAuthenticated)
    {
          var url = @ViewContext.BaseController().GetAvatarUrlById(User.Identity.GetUserId<int>());

        //...
    }

BaseController.cs

        public string GetAvatarUrlById(int id)
        {

            var user = UserManager.FindById(id);

            return "../../" + user.ImageUrl;
        }

Extensions.cs

    public static class ViewContextExtension
    {
        public static BaseController BaseController(this ViewContext view)
        {
            var baseController = (BaseController)view.Controller;
            return baseController;
        }
    }

Что я ищу, но где и как?

Посмотреть:

<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />

РЕШЕНИЕ

Я просто отредактировалExtension.cs файл и используемое наследование для базового контроллера, который используется для _LoginPartial.cshtml и отредактировалViewContextExtension учебный класс:

#region ViewContextExt
public static class ViewContextExtension
{
    public static BaseController BaseController(this ViewContext view)
    {
        var baseController = (BaseController)view.Controller;
        return baseController;
    }

    public static string GetAvatarUrl(this IIdentity identity)
    {
        return ((ClaimsIdentity)identity).Claims.First(c => c.Type == "AvatarUrl").Value;
    }
}

}

endregion

Ответы на вопрос(2)

Ваш ответ на вопрос