代码拉取完成,页面将自动刷新
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Common;
using Google.Protobuf.WellKnownTypes;
using Grpc.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.IdentityModel.Tokens;
using User;
using InternalService = inter.InternalService.InternalServiceClient;
public class UserService : LoginService.LoginServiceBase
{
private readonly InternalService _internalService;
private readonly IHttpContextAccessor _httpContextAccessor;
public UserService(InternalService internalService, IHttpContextAccessor httpContextAccessor)
{
_internalService = internalService;
_httpContextAccessor = httpContextAccessor;
}
[AllowAnonymous]
public override Task<LoginResponse> Login(LoginRequest request, ServerCallContext context)
{
var token = BuildToken(request);
return Task.FromResult(new LoginResponse() { Success = true, Token = token });
}
[Authorize]
public override Task<UserProfile> GetProfile(Empty request, ServerCallContext context)
{
var username = _httpContextAccessor.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name);
return Task.FromResult(new UserProfile() { Username = "aaa", Email = "bbb", Address = "ccc", Age = 0 });
}
//[Authorize(Roles = GlobalConst.AdminPolicy)]
[Authorize(Policy = GlobalConst.AdminPolicy)]
public override async Task<SafeCallResponse> SafeCall(Empty request, ServerCallContext context)
{
var headers = context.RequestHeaders;
headers.Add("caller-user", Environment.UserName);
var resp = await _internalService.InternalCallAsync(request, headers);
return new SafeCallResponse() { HeaderValue = resp.HeaderValue };
}
private static readonly JwtSecurityTokenHandler JwtTokenHandler = new JwtSecurityTokenHandler();
private string BuildToken(LoginRequest request)
{
if (string.IsNullOrEmpty(request.Username))
{
throw new InvalidOperationException("Name is not specified.");
}
var claims = new List<Claim> { new Claim(ClaimTypes.UserData, request.Username) };
if ("guest".Equals(request.Username))
{
claims.Add(new Claim(GlobalConst.RoleClaim, "guest"));
}
if ("admin".Equals(request.Username))
{
claims.Add(new Claim(GlobalConst.RoleClaim, "admin"));
}
var credentials = new SigningCredentials(GlobalConst.SecurityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken("ExampleServer", "ExampleClients", claims,
expires: DateTime.Now.AddDays(60),
signingCredentials: credentials);
return JwtTokenHandler.WriteToken(token);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。