在ASP.NET MVC中,可以使用AuthorizeAttribute来实现在重定向到外部页面时添加令牌。下面是一个示例代码:
public class TokenAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// 用户未登录,进行重定向到登录页面
filterContext.Result = new RedirectResult("/Account/Login");
}
else
{
// 用户已登录,生成令牌并添加到重定向URL中
var token = GenerateToken(filterContext.HttpContext.User.Identity.Name);
var returnUrl = filterContext.HttpContext.Request.Url.AbsoluteUri;
var redirectUrl = $"http://externalpage.com?token={token}&returnUrl={returnUrl}";
filterContext.Result = new RedirectResult(redirectUrl);
}
}
private string GenerateToken(string username)
{
// 生成令牌的代码,可以根据需求自行实现
// 例如使用JWT库来生成令牌
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("your_secret_key");
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, username)
}),
Expires = DateTime.UtcNow.AddMinutes(30),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
return tokenString;
}
}
然后,在需要进行重定向的Controller或Action上使用TokenAuthorizeAttribute进行授权:
[TokenAuthorize]
public ActionResult ExternalPageRedirect()
{
return View();
}
当用户未登录时,会重定向到登录页面。当用户已登录时,会生成令牌并将令牌添加到重定向的URL中。请根据实际需求修改代码中的令牌生成逻辑和重定向URL。