В настоящее время я использую 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;
}
}
Можете ли вы предложить мне способ для этого сценария?