2017-10-13 15 views
0

ログイン機能を持たない.netコア+角度アプリケーションがあります。 私はログインする必要はありませんが、私は "管理パネル"タイプの機能を持っています。Asp.Net Core + Angular =ログインせずにApiを保護する

たとえば、自分のサイトに投稿を追加したいとします。

私はapi/addpost/myPasswordを使用することはできませんか、それとも私が知っている複雑な文字列であっても を見ることができます。 登録/ログイン機能を実装せずに私のapiを保護する方法はありますか?

ありがとうございます!

+0

私はあなたの質問を言い換えてこれを理解しようとします。サービスエンドポイントを保護したいので、アプリケーションの外部にアクセスすることはできませんが、ログイン/登録機能を実装したくないのですか?それはあなたが意味することですか? – eminlala

+0

はい、投稿を追加できる唯一の人物になりたいです。そして、私はそれのためだけにレジスタ/ログイン機能を実装したくありません。あなたがアプリケーションの外からそのサービスにアクセスすることができればうれしいです(私は投稿を追加できる司会者を雇うでしょう...)ので、私は彼にそのAPIだけにアクセスするための "キー"を与えることができますが、 – Marian

答えて

0

できることはいくつかあります。

あなたができる最も簡単なことは、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 
    }); 
    } 

は、より複雑でより安全なオプションについては、あなたは、偽造防止ミドルウェアherehereを実装する方法をチェックアウトすることができます。

+1

.net関数にActionExecutingContextを使用しましたが(HttpActionContextが機能しませんでした.netコア2.0を使用している可能性があります)、角度サービスではローカルストレージから「パスワード」を取得します。あなたのソリューションは私を助けました、ありがとう! – Marian

関連する問題