我在我的应用程序中使用ASP.NET Web API 2,Owin和Identity使用基于令牌的身份验证。
我需要允许用户使用" Admin"角色将信息视为另一个(非管理员)用户(无需密码登录,仅使用其他用户的用户名)。
我不知道如何在控制器中生成新令牌并将其保存在会话中。
答案 0 :(得分:1)
我找到了解决这个问题的方法。这是返回访问令牌
的代码示例 /// <summary>
/// Login as another user (using only a username)
/// </summary>
/// <returns>token key</returns>
[Authorize(Roles = "Admin")]
[Route("LoginAs")]
public async Task<IHttpActionResult> GetLoginAs(string userName)
{
if (string.IsNullOrEmpty(userName))
return new System.Web.Http.Results.ResponseMessageResult(
Request.CreateErrorResponse(
(HttpStatusCode)422,
new HttpError("UserName null or empty")));
try
{
var userIdentity = UserManager.FindByNameAsync(userName).Result;
if (userIdentity != null)
{
var oAuthIdentity = await userIdentity.GenerateUserIdentityAsync(UserManager,
Startup.OAuthOptions.AuthenticationType);
var ticket = new AuthenticationTicket(oAuthIdentity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(60));
string accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);
return Ok(accessToken);
}
return BadRequest();
}
catch (Exception ex)
{
return BadRequest();
}
}