示例#1
0
            /// <summary>
            /// Persists the user credential on the database.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private NullResponse SaveUserCredentials(SaveUserCredentialsDataRequest request)
            {
                using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request.RequestContext))
                {
                    ParameterSet parameters = new ParameterSet();
                    parameters["@bi_recId"]                         = request.UserCredential.RecId;
                    parameters["@nvc_StaffId"]                      = request.UserCredential.StaffId;
                    parameters["@nvc_HashedCredential"]             = request.UserCredential.HashedCredential;
                    parameters["@nvc_Salt"]                         = request.UserCredential.Salt;
                    parameters["@nvc_HashAlgorithm"]                = request.UserCredential.HashAlgorithm;
                    parameters["@nvc_GrantType"]                    = request.UserCredential.GrantType;
                    parameters["@nvc_CredentialId"]                 = request.UserCredential.CredentialId;
                    parameters["@nvc_AdditionalAuthenticationData"] = request.UserCredential.AdditionalAuthenticationData;

                    databaseContext.ExecuteStoredProcedureNonQuery(SaveUserCredentialsSprocName, parameters);
                }

                return(new NullResponse());
            }
            /// <summary>
            /// Executes the workflow.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override NullResponse Process(EnrollUserCredentialRequest request)
            {
                ThrowIf.Null(request, "request");

                if (string.IsNullOrWhiteSpace(request.GrantType))
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "grantType is missing.");
                }

                if (string.IsNullOrWhiteSpace(request.UserId))
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "userId is missing.");
                }

                if (request.ExtraParameters == null)
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_MissingParameter, "extraParameters is missing.");
                }

                if (request.GrantType.Equals(PasswordGrantType, StringComparison.OrdinalIgnoreCase))
                {
                    throw new FeatureNotSupportedException(FeatureNotSupportedErrors.Microsoft_Dynamics_Commerce_Runtime_RequestParameterValueNotSupported, "grant type 'password' is not supported for enrollment.");
                }

                // get the request handler that handles this specific grant type
                IRequestHandler authenticationService = this.Context.Runtime.GetRequestHandler(typeof(GetUserEnrollmentDetailsServiceRequest), request.GrantType);

                if (authenticationService == null)
                {
                    RetailLogger.Log.CrtServicesAuthenticationHandlerNotFound(request.GrantType, typeof(GetUserEnrollmentDetailsServiceRequest));
                    throw new DataValidationException(
                              DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_AuthenticationGrantTypeNotSupported,
                              string.Format("The grant type '{0}' is not supported.", request.GrantType));
                }

                // Get enrollment data from authentication service
                GetUserEnrollmentDetailsServiceRequest  getEnrollmentDetailsRequest = new GetUserEnrollmentDetailsServiceRequest(request.Credentials, request.ExtraParameters);
                GetUserEnrollmentDetailsServiceResponse enrollmentDetailsResponse   = this.Context.Runtime.Execute <GetUserEnrollmentDetailsServiceResponse>(
                    getEnrollmentDetailsRequest,
                    this.Context,
                    authenticationService);

                // Enroll user in headquarters
                EnrollUserCredentialsRealtimeRequest enrollUserRealtimeRequest = new EnrollUserCredentialsRealtimeRequest(
                    request.UserId,
                    request.GrantType,
                    enrollmentDetailsResponse.CredentialId,
                    request.Credentials,
                    enrollmentDetailsResponse.AdditionalAuthenticationData);
                EnrollUserCredentialsRealtimeResponse enrollUserRealtimeResponse = this.Context.Runtime.Execute <EnrollUserCredentialsRealtimeResponse>(enrollUserRealtimeRequest, this.Context);

                // Persist data on local database
                SaveUserCredentialsDataRequest saveUserCredentialsDataRequest = new SaveUserCredentialsDataRequest(enrollUserRealtimeResponse.UserCredential);

                this.Context.Runtime.Execute <NullResponse>(saveUserCredentialsDataRequest, this.Context);

                // Create auth log
                AuthenticationHelper.LogAuthenticationRequest(request.RequestContext, request.UserId, AuthenticationStatus.Success, AuthenticationOperation.EnrollUserCredentials);

                return(new NullResponse());
            }