Ejemplo n.º 1
0
        /// <summary>
        /// Open a new authenticated session via password
        /// </summary>
        /// <param name="spaceName">space name</param>
        /// <param name="password">space password</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <ApiSession> OpenSessionViaSpacePasswordAsync(string spaceName, string password, CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(spaceName))
            {
                throw new ArgumentException("Space name is not set.", nameof(spaceName));
            }

            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            var passwordHash = CryptographyHelper.CalculateSha256HEX(password);
            var serverNonce  = await internalGetAuthNonceAsync(GetHttpClient(), cancellationToken);

            var clientNonce = ConvertHelper.ByteArrayToHexString(CryptographyHelper.GenerateRandomSequence(16));
            var all         = passwordHash + serverNonce + clientNonce;
            var allHash     = CryptographyHelper.CalculateSha256HEX(all);


            var token = await internalAuthLoginAsync(clientNonce, serverNonce, spaceName, allHash, cancellationToken);

            return(new ApiSession(this)
            {
                AuthToken = token,
                IsAnonymous = false,
                IsClosed = false,
                SpaceName = spaceName
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Open a new authenticated session via password
        /// </summary>
        /// <param name="spaceName">space name</param>
        /// <param name="password">space password</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        static async Task <ApiSession> OpenSessionViaSpacePasswordAsync(OpenSessionAuthenticatorContext context, string spaceName, string password, CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(spaceName))
            {
                throw new ArgumentException("Space name is not set.", nameof(spaceName));
            }

            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            var passwordSha256       = CryptographyHelper.CalculateSha256HEX(password);
            var serverNonceApiResult = await context.LowLevelApiClient.AuthGenerateNonce(cancellationToken);

            serverNonceApiResult.ThrowIfFailed();
            var serverNonce  = serverNonceApiResult.Data.Nonce;
            var clientNonce  = ConvertHelper.ByteArrayToHexString(CryptographyHelper.GenerateRandomSequence(16));
            var all          = passwordSha256 + serverNonce + clientNonce;
            var composedHash = CryptographyHelper.CalculateSha256HEX(all);


            var requestDto = new LoginRequestDto
            {
                ClientSeed   = clientNonce,
                Password     = composedHash,
                Provider     = "Space",
                UserName     = spaceName,
                RequestToken = serverNonce
            };
            var authApiResult = await context.LowLevelApiClient.AuthLoginPasswordAsync(requestDto, cancellationToken);

            authApiResult.ThrowIfFailed();
            var token = authApiResult.Data.Token;


            return(new ApiSession(context.MorphServerApiClient)
            {
                AuthToken = token,
                IsAnonymous = false,
                IsClosed = false,
                SpaceName = spaceName
            });
        }