1

I Web Api は Azure Api Management ポータルを介して公開されており、共有シークレットを使用して HTTP ヘッダーを設定するポリシーを追加しました。このようにして、API バックエンド (Azure Web アプリでホストされている API) へのアクセスをブロックしたいと考えています。その共有シークレットを確認するために、webapi のどこにカスタム ロジックを追加すればよいのでしょうか。それはactionFiltersであるべきですか?

4

1 に答える 1

0

最も簡単な方法は、メッセージ ハンドラーを使用することです。このように見えるはずです...

 public class RestrictClientHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            IEnumerable<string> secrets = null;
            request.Headers.TryGetValues("myapi-secret",out secrets);
            var secret = secrets.FirstOrDefault();
            if (secret == null || secret != "the secret" )
            {
                return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Forbidden) { RequestMessage = request, Content=new StringContent("Direct access to this API is not allowed")});
            }
            return base.SendAsync(request, cancellationToken);
        }
    }

そして、構成オブジェクトからぶら下がっている MessageHandlers コレクションに追加することで、これをインストールします。

于 2015-09-21T23:48:23.797 に答える