Ok, this is how I look at the situation.
So you have two URLs and the question is either to redirect301 or use canonical? In my opinion 301 is a better solution and this is because it will not only redirect people to the preferred version but the link value as well.
Whereas, with canonicals only search engines will know what is the preferred page but it will not transfer the link value which can help you with organic rankings.
Hope this helps!