ASP.NET API Owin以另一个用户身份登录

时间:2016-12-01 11:11:40

标签: c# asp.net-web-api owin

我在我的应用程序中使用ASP.NET Web API 2,Owin和Identity使用基于令牌的身份验证。

我需要允许用户使用" Admin"角色将信息视为另一个(非管理员)用户(无需密码登录,仅使用其他用户的用户名)。

我不知道如何在控制器中生成新令牌并将其保存在会话中。

1 个答案:

答案 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();
        }
    }