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
|
{
|
/// <summary>
|
/// 認証処理
|
/// </summary>
|
public class AuthService : AuthCore.AuthCoreBase
|
{
|
private readonly ILogger<BuildingService> _logger;
|
private IConfiguration m_Configuration;
|
|
public AuthService(ILogger<BuildingService> logger, IConfiguration configuration)
|
{
|
_logger = logger;
|
m_Configuration = configuration;
|
}
|
|
public override Task<LoginResult> 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<LoginResult> Logout(DataRequest request, ServerCallContext context)
|
{
|
LoginResult ret = new LoginResult() { ErrNo = 0, ErrData = string.Empty, AccessToKen = string.Empty, RefreshToKen = string.Empty };
|
|
return Task.FromResult(ret);
|
}
|
}
|
}
|