using System.Text; using Dlhis.Middle.Response; using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.RemoteCall.Abstractions; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; namespace Dlhis.Middle.Api { public class FaceBearerTokenHandler : IAuthTokenHandler { /// public string GetToken(IServiceProvider serviceProvider) { var cache = serviceProvider.GetService(); if (cache.TryGetValue("token", out string token)) return "Bearer " + token; var httpClient = serviceProvider.GetService().CreateClient("face"); var hostName = serviceProvider.GetService().GetSection("HostName").Value; var tokenResponse = httpClient.PostAsync($"https://{hostName}/api/user/oauth2/clientgrant", new StringContent(JsonConvert.SerializeObject(new { ClientId = "e509c2aaa98e300c", ClientSecret = "6184d8979fc48105" }), Encoding.UTF8, "application/json")).GetAwaiter().GetResult(); var tokenJson = tokenResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult(); var tokenInfo = JsonConvert.DeserializeObject>(tokenJson); token = tokenInfo.Data.AccessToken; cache.Set("token", token, TimeSpan.FromSeconds(tokenInfo.Data.Expires)); return token; } } }