Example #1
0
        public string GenerateKey([FromBody] SignKeyRequest keyData)
        {
            SignedKeyData data = new SignedKeyData();

            data.roles = keyData.roles;
            data.name  = keyData.name;
            if (keyData.expiresInSecs.HasValue)
            {
                data.expiresAt = DateTime.Now.AddSeconds(keyData.expiresInSecs.Value).ToFileTimeUtc();
            }
            var json_data      = JsonConvert.SerializeObject(data);
            var encrypted_buff = rsaProvider.EncryptData(Encoding.UTF8.GetBytes(json_data));

            return(Convert.ToBase64String(encrypted_buff));
        }
Example #2
0
        protected override Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            return(Task.Run(() =>
            {
                try {
                    if (!Context.Request.Headers.ContainsKey("APIKey"))
                    {
                        return AuthenticateResult.NoResult();
                    }
                    var APIKey = Context.Request.Headers["APIKey"];
                    var encrypted_buff = Convert.FromBase64String(APIKey);
                    var DecryptedAPIKey = apiKeyProvider.DecryptData(encrypted_buff);
                    SignedKeyData signedData = JsonConvert.DeserializeObject <SignedKeyData>(Encoding.ASCII.GetString(DecryptedAPIKey));
                    if (signedData.expiresAt.HasValue)
                    {
                        DateTime expireTime = DateTime.FromFileTimeUtc(signedData.expiresAt.Value);
                        if (DateTime.Now > expireTime)
                        {
                            return AuthenticateResult.Fail("Expired Token");
                        }
                    }
                    var identity = new GenericIdentity("API");
                    identity.AddClaim(new System.Security.Claims.Claim("Origin", "Api"));

                    foreach (var role in signedData.roles)
                    {
                        identity.AddClaim(new System.Security.Claims.Claim("role", role));
                    }

                    var principal = new GenericPrincipal(identity, new[] { signedData.name });

                    var ticket = new AuthenticationTicket(principal, new AuthenticationProperties(), Scheme.Name);
                    return AuthenticateResult.Success(ticket);
                }
                catch (System.Exception e)
                {
                    return AuthenticateResult.Fail(e);
                }
            }));
        }