2011-08-17 25 views
8

私たちは、匿名ユーザーから任意のテキストの束を受け取り、バックエンドで何らかの処理を実行するWCF REST Webサービスを開発中です。私達はちょうど私たちが(401) Unauthorizedを取得し、既定のIISの設定を使用する場合WCF REST Service - 401 Unauthorized

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class MyRESTService : IMyRESTService 
{ 
    [WebInvoke(Method = "PUT", UriTemplate = "/MyRESTMethod?paramA={paramA}&paramB={paramB}")] 
    public Stream MyRESTMethod(string paramA, string paramB, Stream rawData) 
    { 
     //do some stuff... 
    } 
} 

例えば、ここでは私たちのWebサービスからの一つの方法です。しかし、多くの試行錯誤の末、実際に.svcファイルの「Everyone」に書き込みアクセス権を与えることで、動作させることができるとわかりました。

私の質問は、IISがこれを動作させるには.svcファイルへの書き込みアクセス権が必要なのはなぜですか?より良い方法があるのですか?または、このhackish(およびおそらく安全性の低い)回避策に悩まされていますか?

WTF Microsoft?

おそらく関連:

+0

アクセス権に<system.web>の内側

<authentication mode="None" />を入れて固定することができます。代わりに、認証されたユーザーにはこれらの権限が必要です。匿名アクセスの場合、これはIUSRです。 – chiccodoro

答えて

7

M $からハイテクの担当者に話をした後、私は、これは確かに予想される動作であることを知らされました。誰かがリクエストを送信するためには、書き込みアクセスが有効になっていなければなりません。また、これを実行すると、実際に.SVCファイルに自動的に書き込みアクセス権が設定されます。

+0

あなたは私の一日を救った!ところで、これについて考えてみるのは2回目です。リソース上のPUTを要求すると、そのリソースは書き込みアクセスを許可する必要があります。さて、WCFのRESTはおそらくIISが/foobar.svcのPUT要求としてPUT /foobar.svc/some/pathを解釈し、さらに解釈するために "/ some/path"の部分をWCFに転送するように実装されていると思います。だから、IISの場合、これは/foobar.svcのPUTリクエストです - HTTPで話しています:foobar.svc – chiccodoro

9

また、私はこれを発見したが、必ずしも「みんな」に付与する必要はありませんあなたのweb.config

+0

を修正したいのですが、これも私を助けましたが、それは安全ですか? –

+0

環境によって異なります。私の場合、私たちはネットワークが安全であると信じていました。おそらくそれで十分でしょう。サービス間で直接認証が必要な場合は、明らかにこれが問題になります。 – captncraig

関連する問題