3

HMAC 認証方式で保護された API で Resource を使用しようとしています。したがって、リクエストに「Authentication」ヘッダーを追加する必要があります。

このコード例では、GET を使用して API から記事を取得し、「update」カスタム メソッドで更新します。更新には、Authentication ヘッダーが必要です。問題は$scope.articleundefinedヘッダーを定義するときです。

getAuth関数は符号を計算します。

提案?

function EditCtrl($scope,$resource,articleId) {
    var Article = $resource('/blog/articles/:articleId',
    {articleId:articleId}, {
        update: {
            method:'PUT',
            headers: {Authentication: getAuth('key','PUT','/blog/articles/'+articleId,$scope.article)}
        }
    });

    var article = Article.get();
    $scope.article = article;

    $scope.save = function(){
        article.$update();
    }
}

function getAuth(key,verb,resource,data) {
    //data is undefined there

    content_md5 = CryptoJS.MD5(JSON.stringify(data));
    message = verb+'\n'+resource+'\n'+content_md5;
    hash = CryptoJS.HmacSHA512(message, key);

    var sign = "AuthHMAC 0123456789:"+hash.toString(CryptoJS.enc.Base64);

    return sign;
}
4

4 に答える 4

0

次の 3 つの要素を使用して、Alan のソリューションを改善します。

  • 鍵を共有するファクトリーサービス
  • httpRequest を送信するコントローラー
  • ヘッダーを設定する httpRequestInterceptor

コントローラーは、ヘッダーを計算するファクトリ サービスによって提供される setKey() を呼び出します。最後に、httpResponseInterceptor は、ファクトリ サービスによって提供される getKey() を呼び出す要求のヘッダーを設定します。

解決しました!

于 2013-07-11T09:42:14.100 に答える
0

私は今、似たようなことに取り組んでいます。

答えは $httpProvider.defaults.transformRequest 関数を使用することにあると思います。まだ完全ではありませんが、基本はドキュメントに記載されています: http://docs.angularjs.org/api/ng .$http

私はこれだと思います:

var authModule = angular.module('my.AuthModule', [], myAuthModuleCfg);

function myAuthModuleCfg($httpProvider) {
    $httpProvider.defaults.transformRequest.push(myRequestSigner)
}

function myRequestSigner(data, headersGetter) {
    // do some signing, etc...
}
于 2013-09-20T00:02:03.123 に答える