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