37 lines
1.4 KiB
C#
37 lines
1.4 KiB
C#
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
|
|
{
|
|
/// <inheritdoc />
|
|
public string GetToken(IServiceProvider serviceProvider)
|
|
{
|
|
var cache = serviceProvider.GetService<IMemoryCache>();
|
|
if (cache.TryGetValue("token", out string token)) return "Bearer " + token;
|
|
|
|
var httpClient = serviceProvider.GetService<IHttpClientFactory>().CreateClient("face");
|
|
var hostName = serviceProvider.GetService<IConfiguration>().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<DefaultApiResult<TokenResponse>>(tokenJson);
|
|
|
|
token = tokenInfo.Data.AccessToken;
|
|
|
|
cache.Set("token", token, TimeSpan.FromSeconds(tokenInfo.Data.Expires));
|
|
|
|
return token;
|
|
}
|
|
}
|
|
} |