2017-08-01 15 views
1

スタックサービスで承認ベアラの値を取得します、私はシナリオを以下している

モバイルクライアント--->サービス・スタックのAPI(A)---> WCFサービス(B)

は私が送信しています私のサービススタックapi(A)はWCFサービス(B)のための中間APIに過ぎないので、Authプロバイダでサービススタックビルドを使用する必要はありません。

私はHttpRequestMessagePropertyとしてAuthorizationヘッダーをWCFサービス(B)に送信しています。私はwcfサービス側(B)の残りの検証を処理しています。

  1. 私はサービス・スタック側(A)に、モバイルクライアント により送信し、ちょうど他のサービス(B)に渡している「アクセストークン」を得ることができますどのように に関する適切な文書を見つけることができませんでしたこの 。

  2. サービス(B)からセキュリティ例外が発生した場合、どのように効果的に をサービススタック側(A)で管理できますか。理想的には私はそれが私は応答トークンまたは資格情報またはその他の ユーザーの関連を管理するための効果的な方法です何

  3. とモバイルクライアントに401を返すように を希望するセキュリティ例外であれば、1つの場所で 例外を確認したいですサービス内のものスタック側?セッションのようなもの ?

どのような考えがありますか?

答えて

1

任意のHTTPリクエストの情報にアクセスする方法は、など

認証、サービスやカミソリビューでbase.Requestプロパティから、すべてのRequest and Response FiltersFilter Attributesで引数として、どこでも使用可能ですIRequestインターフェースを使用することですHTTPリクエストヘッダは、HTTPリクエストヘッダコレクション、例えばからアクセスできます。

var auth = httpReq.Headers[HttpHeaders.Authorization]; 

あなたはすべての要求のために一般的にこれを処理したい場合は、通常、あなたがいるかどうかを検証するために使用することができGlobal Request Filterを使用したいです有効なAuthorizationヘッダーが送信され、それ以外の場合は有効です。そうでない場合は、HTTPエラー応答を返します。

this.GlobalRequestFilters.Add((req, res, requestDto) => { 
    var auth = req.Headers[HttpHeaders.Authorization]; 
    if (auth == null) 
    { 
     res.StatusCode = (int)HttpStatusCode.Unauthorized; 
     res.EndRequest(); 
    } 
    else if (!MyIsValid(auth)) 
    { 
     res.StatusCode = (int)HttpStatusCode.Forbidden; 
     res.EndRequest(); 
    } 
}); 
+0

ありがとうございました。カスタムサービスランナーを使用しました。上記のコードスニペットを "OnBeforeExecute"内で使用します。例外は "HandleException"内です。 – Thabo

関連する問題