На нашем веб-сайте (ASP.Net MVP 4.7) мы хотели бы предоставить администратору возможность добавлять пользователя Api и генерировать токен для этого пользователя без необходимости входа в систему как пользователь Api.
Поскольку пароль пользователя Api никогда не будет использоваться, я могу изменить пароль при обновлении токена, но не могу понять, как сгенерировать токен для пользователя Api при входе в систему как администратор пользователь (этот код ниже не работает, но я подумал, что добавлю его для пояснения):
[HttpPost]
public async Task<JsonResult> getApiUserToken()
{
var userName = "ApiUser";
var password = Guid.NewGuid().ToString() + "A";
var apiUser = await _context.AspNetUsers.FirstOrDefaultAsync(u => u.UserName == userName);
var userManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var code = await userManager.GeneratePasswordResetTokenAsync(apiUser.Id);
var result = await UserManager.ResetPasswordAsync(apiUser.Id, code, password);
var uri = $"{this.HttpContext.Request.Url.Scheme}://{this.HttpContext.Request.Url.Authority}/Token";
var httpClient = new HttpClient();
var loginData = new
{
grant_type = "password",
username = apiUser.Email,
password = password,
ttl = "MAX",
};
var response = await httpClient.PostAsync(uri, new StringContent(JsonConvert.SerializeObject(loginData), Encoding.UTF8, "application/json"));
if (!response.IsSuccessStatusCode)
{
throw new ApplicationException(response.ReasonPhrase);
}
var responJsonText = await response.Content.ReadAsStringAsync();
return Json(JsonConvert.DeserializeObject(responJsonText), JsonRequestBehavior.AllowGet);
}