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);
}
}
}