Использование клиентских учетных данных как части Usermanager <User> - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я использую Password Flow с моим приложением SPA.

Теперь мне пришлось интегрировать поток Client Credentials с моей текущей реализацией.

var descriptor = new OpenIddictApplicationDescriptor
{
    ClientId = "console",
    ClientSecret = "388D45FA-B36B-4988-BA59-B187D329C207",
    DisplayName = "My client application",
    Permissions =
{
    OpenIddictConstants.Permissions.Endpoints.Token,
    OpenIddictConstants.Permissions.GrantTypes.ClientCredentials
}

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

Но, как я заметил, при использовании Password flow i используется ApplicationUser как часть удостоверения Asp.net отТаблица dbo.User.

Но client credentials происходит из другого пространства имен, которое не связано с пользователем приложения.

Как настроить client_id как часть dbo.User,Как связать Client Credetials с Usermanager<User>?

Почему я хочу эту реализацию, потому что во время операции crud у меня есть имя столбца CreatedBy.который ссылается на таблицу dbo.User, и я хотел заполнить Id от dbo.User.Но в клиентском потоке учетных данных нет User.

Получение идентификатора пользователя

 public interface IUserResolverService
 {
    HttpContext HttpContext { get; }
    Task<Guid> GetUserId();           
 }

  public class UserResolverService : IUserResolverService
  {
        IHostingEnvironment _hostingEnv;
        private readonly IHttpContextAccessor accessor;
        private readonly UserManager<User> _user;
        public UserResolverService(IHttpContextAccessor accessor, UserManager<User> user, IHostingEnvironment hostingEnv)
        {
            this._user = user;
            this.accessor = accessor;
            this._hostingEnv = hostingEnv;
        }
        public HttpContext HttpContext
        {
            get { return accessor.HttpContext; }
        }

        public async Task<Guid> GetUserId()
        {
            var user = await _user.GetUserAsync(accessor.HttpContext.User);
            return user?.Id ?? Guid.Empty;
        }
   }

Можете ли вы предложить мне способ для этого сценария?

1 Ответ

0 голосов
/ 20 октября 2018

Как я могу настроить client_id как часть dbo.User.Как связать учетные данные клиента с Usermanager?

Это невозможно и не имеет никакого смысла, на самом деле.Учетные данные клиента - это единственный основной поток OAuth 2.0, в котором не участвует ни один пользователь, поскольку он был разработан для сценариев «сервис-сервис», где клиентское приложение действует не от имени пользователя, а непосредственно под своей собственной идентификацией.

Чтобы обойти вашу проблему, вы можете либо сделать CreatedBy обнуляемым, либо использовать одно из утверждений, представляющих приложение, которое вы используете в AuthorizationController, например идентификатор клиента или имя клиента.

...