I’ve been looking into Authorization with AspNetWebApi and information is a little sparse on the subject.
I’ve got the following options:
- Pass API token on query string
- Pass API token as header
- Pass API token using Basic Auth
- Pass API token onto the request payload in json.
Which is generally the recommended method?
I’m also wondering for point 4), how would I go about inspecting the json payload in the OnAuthorization method on the AuthorizationFilterAttribute to check whether the API token is correct?
If you want a truly secure option for authorization, something like OAuth is the way to go. This blog post provides a pretty thorough sample using the now obsolete WCF Web API but a lot of the code is salvageable. Or at least, go with using HTTP basic authentication as shown in this blog post. As Aliostad notes, make sure you’re using HTTPS if you go the Basic authentication route so the token stays secure.
If you decide you want to roll your own (which almost always will be much less secure than either option above) then below is a code sample of what you’ll need for the AuthorizationHanlder if you go HTTP header route. Be aware there’s a good chance the way the UserPrinicipal is handled in Web API classes may change so this code is only good for the first preview release. You would need to wire-in the AuthorizationHandler like this:
Code for header token: