using HotelPms.Data; using Grpc.Core; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.IdentityModel.Tokens; using System; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace HotelPms.GrpcService { /// /// 認証処理 /// public class AuthService : AuthCore.AuthCoreBase { private readonly ILogger _logger; private IConfiguration m_Configuration; public AuthService(ILogger logger, IConfiguration configuration) { _logger = logger; m_Configuration = configuration; } public override Task Login(DataRequest request, ServerCallContext context) { LoginResult ret = new LoginResult() { ErrNo = 0, ErrData = string.Empty, AccessToKen = string.Empty, RefreshToKen = string.Empty }; //DBチェック //var result = await _signInManager.PasswordSignInAsync(login.Email, login.Password, false, false); //if (!result.Succeeded) return BadRequest(new LoginResult { Successful = false, Error = "Username and password are invalid." }); var claims = new[] { new Claim(ClaimTypes.Name, request.LoginID) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(m_Configuration["JwtSecurityKey"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var expiry = DateTime.Now.AddDays(Convert.ToInt32(m_Configuration["JwtExpiryInDays"])); //var expiry = DateTime.Now.AddSeconds(30); //在 .net core 中有一个属性的值,默认是300,也就是5分钟后,假如生命周期设置的是30秒,还需要加上这300秒 //在验证令牌生命周期时间到后,立即过期;默认的是300秒 ClockSkew = TimeSpan.Zero, 按自己理解的注释的, var token = new JwtSecurityToken( m_Configuration["JwtIssuer"], m_Configuration["JwtAudience"], claims, expires: expiry, signingCredentials: creds ); ret.AccessToKen = new JwtSecurityTokenHandler().WriteToken(token); return Task.FromResult(ret); } public override Task Logout(DataRequest request, ServerCallContext context) { LoginResult ret = new LoginResult() { ErrNo = 0, ErrData = string.Empty, AccessToKen = string.Empty, RefreshToKen = string.Empty }; return Task.FromResult(ret); } } }