2

[Restrict]サービススタックでの属性の使用に関するドキュメントはありますか?

ドキュメントが見つからないため、これを理解しようとしました。AppHost.cs Configure イベントで制限を有効にする必要があることを発見しました

var endpointHostConfig = new EndpointHostConfig
        {
            EnableAccessRestrictions = true,
        };

次に、リクエスト DTO に属性を追加しました。

[Route("Hello/World", "GET")]
[Restrict(EndpointAttributes.InternalNetworkAccess)]

これは機能しません...すべての「デフォルト」制限が削除され、その 1 つの制限だけに置き換えられるように見えますか? 代わりにこれを使用するとうまくいくようです:

[Restrict(InternalOnly = true)]

ローカル LAN から GET を実行すると機能しますが、リモートからは機能しません。興味深いことに、リモートから提供される「詳細なスタック エラー」は次のとおりです。

次の制限が満たされませんでした: '\n -[InternalNetworkAccess, Secure, HttpHead, HttpPost, HttpPut, HttpDelete, HttpOther, OneWay, Soap11, Soap12, Xml, Jsv, ProtoBuf, Csv, Html, Yaml, MsgPack, FormatOther, AnyEndpoint] '

可能性の1つとしてHttpGetをリストしていないことに注意してください-これは機能します。Secure ではなく InSecure についても言及しています...どちらも特に必要としません。

これがどのように機能するのかを正確に説明できますか? SSL を要求したい場合はどうすればよいですか?どのように指定すればよいですか?

本番環境で SSL を要求したいが、このエンドポイントのすべてのサービスでステージングを要求したくない場合はどうすればよいですか? (これを実現することは、構成するための完全に異なる方法である可能性があります)。

4

1 に答える 1

1

[Restrict]属性機能は ServiceStack の最新バージョンにあります。現在、これに関する唯一のドキュメントはSecurity wiki pageにあります。

制限属性の検証をテストするいくつかのEndpointAttributes 制限テストと、使用できるいくつかの異なるサービス構成を次に示します。

これが機能する方法は、指定されたものすべてに制限されるため、SSL を有効にして他のすべてを制限しない場合は、次のように追加するだけです。

[Restrict(EndpointAttributes.Secure)]
public class SslOnly { }

また、許可されている環境の複数の組み合わせを指定することもサポートしています。

[Restrict(EndpointAttributes.Secure   | EndpointAttributes.External,
          EndpointAttributes.InSecure | EndpointAttributes.InternalNetworkAccess)]
public class SslExternalAndInsecureInternal { }

注: 各環境は Enum フラグと組み合わされ、. で区切られ,ます。

ただし、デバッグ ビルドとリリース ビルドを区別することはできません。これを有効にするには、C# 条件付きコンパイル シンボルを使用する必要があります。

たとえば、デバッグ ビルドには HTTP のみを許可し、プロダクション リリース ビルドには HTTPS のみを許可します。

#if DEBUG
    [Restrict(EndpointAttributes.InSecure)]
#else
    [Restrict(EndpointAttributes.Secure)]
#endif
public class MyRequestDto { ... }
于 2013-01-28T22:24:42.170 に答える