【问题标题】:MVC6 and Web Api AuthenticationMVC6 和 Web Api 身份验证
【发布时间】:2016-05-13 01:39:33
【问题描述】:

嗯,这是一个错误。 我决定将我的 MVC5 应用程序迁移到 MVC6 并且一切都很好,直到我需要迁移我的身份验证。 我的 MVC 应用程序使用返回令牌的外部 Web Api 2 应用程序登录。 我构建了一个过滤器来处理这个问题:

/// <summary>
/// Uses the session to authorize a user
/// </summary>
public class SimpleAuthorize : AuthorizeAttribute
{

    /// <summary>
    /// Authorizes the user
    /// </summary>
    /// <param name="httpContext">The HTTP Context</param>
    /// <returns></returns>
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var accessToken = httpContext.Session["AccessToken"];

        if (accessToken == null)
            return false;

        return true;
    }
}

应用于所有控制器。 现在,您似乎是can't do that anymore as mentioned here。 那么,如何让我的应用程序使用 API?

我尝试过搜索,但没有发现任何可以帮助我解决我的情况。有谁知道我该如何解决这个问题,或者可以为我指出一些像样的文档的方向?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core-mvc


    【解决方案1】:

    您可以通过编写授权中间件来处理它,该中间件从访问令牌中创建一个身份。拥有一个有效的身份就足以让授权成功,如果您需要更详细的信息,您可以深入研究政策。类似的东西

    public class SessionAuthenticationHandler : 
        AuthenticationHandler<SessionAuthenticationOptions>
    {
    
        protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
        {
            var sessionToken = Request.HttpContext.Session.GetString("Token");
    
            if (sessionToken == null)
            {
                return AuthenticateResult.Failed("No session token");
            }
    
            // Construct principal here
            var principal = 
                new ClaimsPrincipal(new ClaimsIdentity(new[] { 
                    new Claim("SessionToken", sessionToken) }, Options.AuthenticationScheme));
    
            var ticket = new AuthenticationTicket(principal, new AuthenticationProperties(), 
                Options.AuthenticationScheme);
            return AuthenticateResult.Success(ticket);
        }
    }
    

    话虽如此,ASP.NET 从未使用会话来保存身份验证详细信息的原因是会话固定攻击。

    【讨论】:

    • 不使用会话,你将如何处理它?
    • 我必须更多地了解您的应用架构。通常您将 cookie 换成 jwt cookie 并将其添加到授权标头中
    • 你能给我一个例子(某处的一些文件)可以帮助我实现这一目标吗?
    • 我不知道有什么我害怕的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2017-10-22
    • 2014-01-28
    • 2012-06-16
    • 2016-07-03
    相关资源
    最近更新 更多