/// <summary> /// Only to get Api Server public key, by sending JEdixWin Client Name /// </summary> /// <param name="token"></param> /// <returns></returns> public static async Task <bool> ExchangePublicKey(CancellationToken token = new CancellationToken()) { using (var clientKeyExchange = new AparteHttpClient(WinClient.ApiServiceUri, HttpHeader.ExchangePublicKeyHeader())) { var content = JsonSerializer.GetStringContent(new { Name = KeyFile.JEDIX_WIN_CLIENT_NAME }); using (var response = await clientKeyExchange.PostAsync("api/Account/ExchangePublicKeys", content, token).ConfigureAwait(false)) { if (response.IsSuccessStatusCode) { var jwsString = await response.Content.ReadAsStringAsync(); var jws = JWT.ParseFromBase64Url(jwsString); WinClient.ServerPublicKey = jws[JWTConstant.CLAIM_PUBLIC_KEY]; } } } return(ApiClient.WinClient.IsClientAuthorized); }
private static JWT GetBasicAuthorizationHeader(HttpRequestMessage request) { var content = request.Headers.Authorization.Parameter; if (content == null) { return(null); } var jwt = JWT.ParseFromBase64Url(content); var jwtDestination = jwt.Audience; var jwtIssuer = jwt.Issuer; if (jwtDestination != KeyFile.AUTHENTICATION_SERVER_NAME) { return(null); } if (jwtIssuer != KeyFile.JEDIX_WIN_CLIENT_NAME) { //using (var dbContext = new ApiDbContext()) //{ // var issuer = dbContext.Clients.Where(a => a.Name == jwtIssuer).FirstOrDefault(); // if (issuer == null) // return null; //} } var publicKey = jwt[JWTConstant.CLAIM_PUBLIC_KEY]; if (!Audiences.Exists(jwtIssuer)) { var key = Security.Cryptography.SymmetricKey.GenerateSymmetricKey(); Audiences.Add(jwtIssuer, publicKey, key); } return(jwt); }