示例#1
0
            private async void btnLogon_Click(object sender, EventArgs e)
            {
                try
                {
                    IAuthenticationManager           authenticationManager = ManagerFactory.GetManager <IAuthenticationManager>();
                    CommerceAuthenticationParameters commerceParameters    = new CommerceAuthenticationParameters(MainForm.CommerceAuthenticationParametersGrantType, MainForm.CommerceAuthenticationParametersClientId);
                    this.UserIdToken = await authenticationManager.AcquireToken(this.textBoxUserName.Text, this.textBoxPassword.Text, commerceParameters);

                    this.mainForm.Log("Logon succeeded.");
                }
                catch (Exception ex)
                {
                    this.mainForm.Log(ex.ToString());
                }

                this.Close();
            }
            /// <summary>
            /// Acquires the token.
            /// </summary>
            /// <param name="userName">Name of the user.</param>
            /// <param name="password">The password of the user.</param>
            /// <param name="commerceAuthenticationParameters">The additional commerce authentication parameters.</param>
            /// <returns>The user token.</returns>
            internal override async Task <UserToken> AcquireToken(string userName, string password, CommerceAuthenticationParameters commerceAuthenticationParameters)
            {
                ThrowIf.Null(commerceAuthenticationParameters, "commerceAuthenticationParameters");

                StringBuilder data            = this.CreateAcquireTokenRequest(userName, password, commerceAuthenticationParameters);
                const string  TokenEntityName = "token";

                using (var response = await this.SendServerRequest(data, HttpMethod.Post, TokenEntityName, FormUrlEncondedContentType, commerceAuthenticationParameters.RetailOperation.HasValue))
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        var result = Newtonsoft.Json.JsonConvert.DeserializeObject <CommerceAuthenticationResult>(reader.ReadToEnd());

                        return(new UserIdToken(result.IdToken));
                    }
            }
            /// <summary>
            /// Creates the acquire token request.
            /// </summary>
            /// <param name="userName">Name of the user.</param>
            /// <param name="password">The password.</param>
            /// <param name="authenticationParameters">The authentication parameters.</param>
            /// <returns>The request body.</returns>
            private StringBuilder CreateAcquireTokenRequest(string userName, string password, CommerceAuthenticationParameters authenticationParameters)
            {
                // Create the data to send to token endpoint
                StringBuilder data = new StringBuilder();

                data.Append("username="******"&password="******"&{0}={1}", authenticationParameter.Key, Uri.EscapeDataString(authenticationParameter.Value.ToString())));
                    }
                }

                return(data);
            }
 /// <summary>
 /// Acquires the user token.
 /// </summary>
 /// <param name="userName">Name of the user.</param>
 /// <param name="password">The password of the user.</param>
 /// <param name="commerceAuthenticationParameters">The additional commerce authentication parameters.</param>
 /// <returns>The user token.</returns>
 internal abstract Task <UserToken> AcquireToken(string userName, string password, CommerceAuthenticationParameters commerceAuthenticationParameters);
            /// <summary>
            /// Acquires a user token.
            /// </summary>
            /// <param name="grant_type">The grant type.</param>
            /// <param name="client_id">The client identifier.</param>
            /// <param name="username">Name of the user.</param>
            /// <param name="password">The password of the user.</param>
            /// <param name="operation_id">The operation identifier.</param>
            /// <param name="credential">The user's credential.</param>
            /// <returns>The user token.</returns>
            /// <remarks>The parameter names must match the server definition, otherwise <see cref="AdaptorCaller"/> will not bind the method.</remarks>
            public Task <UserToken> Token(string grant_type, string client_id, string username, string password, RetailOperation?operation_id, string credential)
            {
                CommerceAuthenticationParameters parameters = new CommerceAuthenticationParameters(grant_type, client_id, operation_id, credential);

                return(CommerceAuthenticationManager.Value.AcquireToken(username, password, parameters));
            }
            /// <summary>
            /// Acquires the user token.
            /// </summary>
            /// <param name="userName">Name of the user.</param>
            /// <param name="password">The password of the user.</param>
            /// <param name="commerceAuthenticationParameters">The commerce authentication parameters.</param>
            /// <returns>The user commerce runtime token.</returns>
            internal override Task <UserToken> AcquireToken(string userName, string password, CommerceAuthenticationParameters commerceAuthenticationParameters)
            {
                ThrowIf.Null(commerceAuthenticationParameters, "commerceAuthenticationParameters");

                return(Execute <UserToken>(() =>
                {
                    CommerceRuntimeUserToken commerceUserToken;
                    CommerceIdentity originalIdentity = CommerceRuntimeManager.Identity;
                    ConnectionRequest connectionRequest = this.CreateAcquireTokenRequest(userName, password);
                    connectionRequest.Credential = commerceAuthenticationParameters.Credential;
                    connectionRequest.GrantType = commerceAuthenticationParameters.GrantType;
                    connectionRequest.AdditionalAuthenticationData = commerceAuthenticationParameters;

                    LogonCredentials credentials = null;

                    if (!commerceAuthenticationParameters.RetailOperation.HasValue)
                    {
                        try
                        {
                            CommerceIdentity commerceIdentity = new CommerceIdentity(string.Empty, 0, 0, new string[] { });
                            commerceIdentity.Roles.Add(CommerceRoles.Anonymous);

                            // Set anonymous identity from request.
                            CommerceRuntimeManager.Identity = commerceIdentity;

                            credentials = SecurityManager.Create(CommerceRuntimeManager.Runtime).LogOn(connectionRequest);

                            // Clear the commerce identity.
                            CommerceRuntimeManager.Identity = null;
                        }
                        catch (Exception)
                        {
                            CommerceRuntimeManager.Identity = originalIdentity;
                            throw;
                        }

                        commerceUserToken = new CommerceRuntimeUserToken(credentials.Identity);
                    }
                    else
                    {
                        credentials = SecurityManager.Create(CommerceRuntimeManager.Runtime).ElevateUser(connectionRequest, (RetailOperation)commerceAuthenticationParameters.RetailOperation);
                        commerceUserToken = new CommerceRuntimeUserToken(originalIdentity, credentials.Identity);
                    }

                    return commerceUserToken;
                }));
            }