From the code you have posted there, it doesn’t look like, at any time, you’re are hooking the function on to save_post
outside of your function.
function change_pos_auth($post_id){
if ( ! wp_is_post_revision( $post_id ) ){
// unhook this function so it doesn't loop infinitely
remove_action('save_post','change_pos_auth');
if ( isset($_GET['auth_id']) ) {
$args = array('ID'=>$post_id,'post_author'=>$_GET['auth_id']);
// update the post, which calls save_post again
wp_update_post( $args );
}
// re-hook this function
add_action('save_post','change_pos_auth');
}
}
add_action('save_post', 'change_pos_auth');
The rest of the code looks ok providing $_GET[‘auth_id’] is populated.
NB: Don’t forget to sanitize that value before you put it into the database.