できることはいくつかあります。
あなたができる最も簡単なことは、APIコントローラメソッドを入力する前にサービスコールを検証するカスタムActionFilterAttribute
を作成することです。
ここではGuid
の値を使用しましたが、何でも使用できます。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class CustomValidateRequestAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var headerValue = actionContext.Request.Headers.FirstOrDefault(item => item.Key == "validation-value").Value?.FirstOrDefault();
Guid guidValidationValue;
if (string.IsNullOrWhiteSpace(headerValue) && !Guid.TryParse(headerValue , out guidValidationValue))
{
throw new UnauthorizedAccessException();
}
base.OnActionExecuting(actionContext);
}
}
あなたのAPIコントローラであなたのAddPost
方法にこのカスタム属性を追加します。
[HttpPost]
[CustomValidateRequest]
public async Task<IHttpActionResult> AddPost...//rest of your code
サービス側では、このヘッダー値をヘッダーに追加する必要があります。ような何か:
addPosts(url, data) {
let headers = new Headers();
headers.append('validation-value', 'your-guid-value-or-something-else');
return this.http.post(url, {
headers: headers
});
}
は、より複雑でより安全なオプションについては、あなたは、偽造防止ミドルウェアhereとhereを実装する方法をチェックアウトすることができます。
私はあなたの質問を言い換えてこれを理解しようとします。サービスエンドポイントを保護したいので、アプリケーションの外部にアクセスすることはできませんが、ログイン/登録機能を実装したくないのですか?それはあなたが意味することですか? – eminlala
はい、投稿を追加できる唯一の人物になりたいです。そして、私はそれのためだけにレジスタ/ログイン機能を実装したくありません。あなたがアプリケーションの外からそのサービスにアクセスすることができればうれしいです(私は投稿を追加できる司会者を雇うでしょう...)ので、私は彼にそのAPIだけにアクセスするための "キー"を与えることができますが、 – Marian