Azureはじめました

Windows Azureで業務システムを組んでみる日記

WebAPIの認証についてあれこれ

WebAPIで一部のデータをデスクトップアプリに公開しようとしてるんだが、ApiControllerにAuthorize属性を付けて

[Authorize]
public class MyApiController:ApiController{

    public IEnumerable<string> Get(){
        return new string[]{"hoge","huga"};
    }
}

みたいにすると、HTTP:302でログインページにリダイレクトされるんだが、Apiの使い道としてこれは非常によろしくない。

さてどうしたもんか。

まんま同じこと悩んでる人おった。

以上で、いちおう、ASP.NET MVC4 WebAPI サイトを、HTTP 認証による認証にて、アクセス制御ができるようになった。
HTTP 認証なので、様々なプラットフォームから、認証可能なはずだ。

ただし、この方法では、サイトがまるごと HTTP 認証による認証となってしまう。

人が Web ブラウザを使ってページを開くときは Forms 認証、外部アプリケーションからの API への直アクセスに対しては HTTP 基本認証、といったように、アクセスの仕方に応じて認証方法を違えるのは、このアプローチでは限界がある。
ASP.NET MVC4 WebAPI サイトで認証・承認を行う : Developer @ ADJUST

FormsAuthenticationModuleが仕込まれてると、これはもうHttpHandlerの実行タイミングじゃどうにもならないのtで、こういうやり方になると思います。標準で用意されてる認証モジュールって共存出来ないし。 ApiControllerはHttpControllerHandlerから実行されるので、実質HttpHandlerですよね。途中でMessageをいじるっていうのはそこに対するAOP的な動作。 それほどコードを書くわけでも無いので、コレでいいかなーって思いますが、いかがでしょーか?後は、素直に別サイトにしてしまう、とか...。

お楽しみはこれからだ!: ApiControllerで認証する際にログインページにリダイレクトしたくない

なるほど。

認証は分けた。じゃ肝心のAPIでの認証はどうするの?

(;´д`) あとでかく