Как сгенерировать токен для другого пользователя ASP.Net - PullRequest
0 голосов
/ 27 марта 2019

На нашем веб-сайте (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);
}
...