public class TokenController : ApiController // 定义一个名为 TokenController 的类,继承自 ApiController 类。
{
[HttpPost] // 使用 HTTP POST 请求方式。
public HttpResponseMessage Login(User user) // 定义一个名为 Login 的方法,它接受一个 User 对象作为参数,并返回一个 HttpResponseMessage 对象。
{
if (user == null) // 如果 user 参数为空,则抛出一个 HTTP 响应异常(状态码为 400)。
{
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
if (IsValid(user)) // 如果 IsValid 方法返回 true,则调用 TokenGenerator 类的 GenerateTokenJwt 方法生成一个 token,并将其作为 HTTP 响应正文返回给客户端。否则,返回一个 HTTP 响应异常(状态码为 401)。
{
var token = TokenGenerator.GenerateTokenJwt(user.Username);
return Request.CreateResponse(HttpStatusCode.OK, token);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid username or password.");
}
}
private bool IsValid(User user) // IsValid 方法用于验证用户是否有效。在这个示例中,该方法始终返回 true。
{
// TODO: Check if the user is valid
return true;
}
}
public static class TokenGenerator // 定义一个名为 TokenGenerator 的静态类。
{
public static string GenerateTokenJwt(string username) // 定义一个名为 GenerateTokenJwt 的静态方法,它接受一个字符串类型的参数 username,并返回一个字符串类型的 token。
{
var securityKey = new SymmetricSecurityKey(Encoding.Default.GetBytes("your custom Security Key phrase")); // 创建一个 SymmetricSecurityKey 对象,它使用指定的字符串作为密钥。
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature); // 创建一个 SigningCredentials 对象,它使用指定的 SymmetricSecurityKey 对象和 HmacSha256Signature 签名算法。
var claims = new[] // 创建一个 Claim 数组,
{
new Claim(JwtRegisteredClaimNames.Sub, username), // 包含用户名称的声明。
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), // 包含唯一标识符的声明。
};
var token = new JwtSecurityToken( // 创建一个 JwtSecurityToken 对象,它包含要包含在 token 中的声明、签名凭据和其他选项。
issuer: "yourdomain.com", // 发行者名称。
audience: "yourdomain.com", // 接收者名称。
claims: claims, // 包含要包含在 token 中的声明的数组。
expires: DateTime.UtcNow.AddDays(1), // token 的过期时间。
signingCredentials: signingCredentials); // 用于签名 token 的凭据。
return new JwtSecurityTokenHandler().WriteToken(token); // 将 JwtSecurityToken 对象转换为字符串类型的 token 并返回该字符串。
}
}