コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }