Once the 'Contact' part of Q2 is solved, the issue of Q1 will be solved.
To get the 'Contact' to automatically assign to the ticket being created through Workflow, I use two components at the beginning of my Workflow or WebForm projects that are directly down-stream of the "Create Notification Server Credentials" component that authenticates into the Helpdesk NS server. The two components are the "GetCurrentUser" and "FindServiceDeskContact" components. Please see the attached doc that will explain how to set up these components in a Web Form project and allow the components to automatically set the Contact on a ticket. Note, the attached doc is with the assumption that the user filling out the webform is authenticated into a windows domain and the user is not selecting from a list of contacts on the form.
You can do a similar method for the asset using either the "GetAssetsForUserComponent" or "GetAssetsForUserByIdComponent". You'd want to have one of these components downstream of the "GetCurrentUser" and "FindServiceDeskContact" components or as part of a dynamic model in a WebForm (for the user to select from a list of their assets for example). I haven't personally used the asset side in any of my projects yet but you're basically going to use one of these components to get the desired asset information into a variable for the asset and then in the "CreateTicketComponent" or "EditTicketComponent" you go to the 'Associations' tab and for the "Managed Object ID" you use a variable and map it to the ID from your asset variable.
Someone that has already used Assets in their projects already could probably give you a better answer on that but I believe that's all there is to it. There are also some Active Directory components that a company called Incendio" has put out on the Juice for download you could use so you could pull data not from the Helpdesk server's Contact database but directly from AD. I haven't fully used those yet in my projects though.