| | |
| | | using Furion; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.DataEncryption; |
| | | using Furion.HttpRemote; |
| | | using Microsoft.EntityFrameworkCore; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Net.Http.Headers; |
| | | using System.Security.Claims; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | |
| | | { |
| | | public async Task<string> SendAsStringAsync(HttpRequestBuilder builder) |
| | | { |
| | | var token = App.HttpContext.Request.Headers["Authorization"].ToString(); |
| | | if (token.IsNotNull()) |
| | | var httpRemoteService = App.GetRequiredService<IHttpRemoteService>(); |
| | | builder = WithHeader(builder, "Authorization"); |
| | | builder = WithHeader(builder, "X-Authorization"); |
| | | var response = await httpRemoteService.SendAsStringAsync(builder); |
| | | try |
| | | { |
| | | builder = builder.AddAuthentication(new AuthenticationHeaderValue("Authorization", token)); |
| | | var result = response.JsonTo(new |
| | | { |
| | | Code = 0 |
| | | }); |
| | | if (result.Code == 401) |
| | | { |
| | | var accessToken = GetHeaderValue(builder, "Authorization"); |
| | | var logier = await accessToken.GetCurrentLogier(); |
| | | if (logier != null) |
| | | { |
| | | builder = WithHeader(builder, "Authorization", $"Bearer {logier.AccessToken}"); |
| | | builder = WithHeader(builder, "X-Authorization", $"Bearer {logier.RefreshToken}"); |
| | | response = await httpRemoteService.SendAsStringAsync(builder); |
| | | } |
| | | } |
| | | } |
| | | catch { } |
| | | return response; |
| | | } |
| | | |
| | | var refreshToken = App.HttpContext.Request.Headers["X-Authorization"].ToString(); |
| | | if (refreshToken.IsNotNull()) |
| | | public string GetHeaderValue(HttpRequestBuilder builder, string name) |
| | | { |
| | | string value = null; |
| | | if (builder.Headers?.ContainsKey(name) ?? false) |
| | | { |
| | | builder = builder.AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken)); |
| | | value = builder.Headers[name].FirstOrDefault(); |
| | | } |
| | | else if (App.HttpContext.Request.Headers.ContainsKey(name)) |
| | | { |
| | | value = App.HttpContext.Request.Headers[name].ToString(); |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | return await App.GetRequiredService<IHttpRemoteService>().SendAsStringAsync(builder); |
| | | private HttpRequestBuilder WithHeader(HttpRequestBuilder builder, string name, string value = null) |
| | | { |
| | | value ??= GetHeaderValue(builder, name); |
| | | if (value.IsNotNull()) |
| | | { |
| | | builder = builder.WithHeader(name, value, replace: true); |
| | | } |
| | | return builder; |
| | | } |
| | | } |
| | | } |