From 101631a0041f22570d7c2d9378cbfd0cec5ca14b Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 7 Feb 2019 00:39:51 +0800 Subject: Add authorization. --- Timeline/Controllers/UserController.cs | 46 +++++++++++----------------------- 1 file changed, 15 insertions(+), 31 deletions(-) (limited to 'Timeline/Controllers/UserController.cs') diff --git a/Timeline/Controllers/UserController.cs b/Timeline/Controllers/UserController.cs index 08f9a66a..9d6970e7 100644 --- a/Timeline/Controllers/UserController.cs +++ b/Timeline/Controllers/UserController.cs @@ -1,15 +1,6 @@ -using System; -using System.IdentityModel.Tokens.Jwt; -using System.Linq; -using System.Security.Claims; -using System.Text; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using Microsoft.IdentityModel.Tokens; -using Timeline.Configs; using Timeline.Services; namespace Timeline.Controllers @@ -29,20 +20,26 @@ namespace Timeline.Controllers public string Password { get; set; } } - private readonly IOptionsMonitor _jwtConfig; + public class LoginInfo + { + public string Token { get; set; } + public string[] Roles { get; set; } + } + private readonly IUserService _userService; + private readonly IJwtService _jwtService; private readonly ILogger _logger; - public UserController(IOptionsMonitor jwtConfig, IUserService userService, ILogger logger) + public UserController(IUserService userService, IJwtService jwtService, ILogger logger) { - _jwtConfig = jwtConfig; _userService = userService; + _jwtService = jwtService; _logger = logger; } [HttpPost("[action]")] [AllowAnonymous] - public IActionResult LogIn([FromBody] UserCredentials credentials) + public ActionResult LogIn([FromBody] UserCredentials credentials) { var user = _userService.Authenticate(credentials.Username, credentials.Password); @@ -51,28 +48,15 @@ namespace Timeline.Controllers return BadRequest(); } - _logger.LogInformation(LoggingEventIds.LogInSucceeded, "Login with username: {} succeeded."); + _logger.LogInformation(LoggingEventIds.LogInSucceeded, "Login with username: {} succeeded.", credentials.Username); - var jwtConfig = _jwtConfig.CurrentValue; - - var handler = new JwtSecurityTokenHandler(); - var tokenDescriptor = new SecurityTokenDescriptor() + var result = new LoginInfo { - Subject = new ClaimsIdentity(new Claim[]{ new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()) }), - Issuer = jwtConfig.Issuer, - Audience = jwtConfig.Audience, - SigningCredentials = new SigningCredentials( - new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtConfig.SigningKey)), SecurityAlgorithms.HmacSha384), - IssuedAt = DateTime.Now, - Expires = DateTime.Now.AddDays(1) + Token = _jwtService.GenerateJwtToken(user), + Roles = user.Roles }; - var token = handler.CreateToken(tokenDescriptor); - var tokenString = handler.WriteToken(token); - - Response.Headers.Append("Authorization", "Bearer " + tokenString); - - return Ok(); + return Ok(result); } } } -- cgit v1.2.3