嗯,这是一个错误。 我决定将我的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?
我试过搜索,发现没有什么可以帮助我解决我的情况。有谁知道我怎么能解决这个问题,或者能指出一些体面的文件?
答案 0 :(得分:0)
您可以通过编写授权中间件来接近它,该中间件会从访问令牌中创建一个身份。拥有有效身份足以使授权成功,然后您可以深入研究政策,如果您需要更详细的内容。像
这样的东西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从未使用会话来保存身份验证详细信息的原因是会话固定攻击。