using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
namespace JwtDemo.Controllers
{
public class AccountController : Controller
{
public async Task<string> Login()
{
return await Task.FromResult("请先登录");
}
//使用cookie登录才能看到内容
[Authorize]
public IActionResult Content1()
{
return Content("只有登录的人才能看到");
}
//使用cookie认证才能看到内容
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult Content2()
{
return Content("只有登录的人才能看到");
}
// cookie和jwt认证
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme+","+CookieAuthenticationDefaults.AuthenticationScheme)]
public IActionResult Content3()
{
return Content("只有登录的人才能看到");
}
// cookie登录
public async Task<IActionResult> CookieLogin(string userName, string password)
{
var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
identity.AddClaim(new Claim("Name", userName));
await this.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
return Content("登录");
}
/// <summary>
/// token登录
/// </summary>
/// <param name="securityKey"></param>
/// <param name="userName"></param>
/// <returns></returns>
public IActionResult JwtLogin([FromServices]SymmetricSecurityKey securityKey,string userName)
{
List<Claim> claims = new List<Claim>();
claims.Add(new Claim("Name", userName));
var creds = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "localhost",
audience: "localhost",
claims:claims,
expires:DateTime.Now.AddMinutes(30),
signingCredentials:creds
);
var t = new JwtSecurityTokenHandler().WriteToken(token);
var result = User.Identity.IsAuthenticated;
return Content(t + "----" + result.ToString());
}
}
}