0

サーバー側に戻したいjavascript変数があります。その後、それをアクセストークンとして使用して、このトークンを必要とする他のページへのユーザーアクセスを許可します。

このjavascript変数をサーバーに戻すにはどうすればよいのでしょうか?セッション変数に設定できますか? ajaxを使用して送り返す必要がありますか?

これは、サーバーからトークンを取得するために使用するjQueryの一部です

$(document).ready(function () {
        $('#loginForm').submit(function(e) {
            var blargh = $(this).find('input').serialize();

            $.ajax({
                type: 'post',
                url: '/WebAPI/api/authenticate/login',
               data: blargh,
                success: function (data) {
                    $.each(data, function(index, token) {
                        $('#container').prepend('<input type="hidden" name="MY_HIDDEN_FIELD_NAME" id="MY_HIDDEN_FIELD_NAME" value="'+token+'">');
                    });
                },
                error: function(jqXHR, status, errorThrown) {
                    alert("Error " + status + "\nError Thrown" + errorThrown )
                },
            });
            e.preventDefault();

        });

    });
4

4 に答える 4

0

AJAX POSTで追加のアイテムを返すには、次のように追加できます...

var blargh = $(this).find('input').serialize();
blargh.someItem = "value";

これは、フォームがAJAXを使用して送信された場合にのみ機能するため、JavaScriptが使用できない場合や無効になっている場合は機能しないことに注意してください。

通常のセキュリティ免責事項がすべて適用されます。

于 2012-07-08T15:45:39.807 に答える
0

まず、クライアントがトークンを生成するのはなぜですか (正しく理解できていることを願っています)。サーバーはトークンを生成する必要があり、クライアントはそれを維持する責任を負う必要があります。

JavaScript からブラウザーでのみ使用される API トークンである場合は、認証 Cookie を使用することをお勧めします。すべてのブラウザーはそれらの処理方法を知っており、許可したくない場合はサーバー側で簡単に期限切れにすることもできます。アクセスできる特定のトークン (これは非常に重要なポイントです)。また、認証セッションを維持するためにサーバー側のセッションに依存しないことを強くお勧めします。

認証トークンは理想的にはステートレスである必要があります (フォーム認証の Cookie と同様) - 立証責任はクライアントにあり、正しいトークンを送信する必要があります。そのトークンには、正しいユーザーで現在の要求状態を再初期化するために必要な情報が含まれています。 .

ただし、それが任意のタイプのクライアント向けの汎用 API である場合は、クライアントがすべてのリクエストのクエリ文字列でトークンを送信できるようにする必要があります。また、リクエストヘッダーでの取得もサポートする必要があります-リクエストヘッダーの設定を簡単にサポートできるクライアントは、URLから認証トークンを隠し、リクエストのフォーマットを簡単にするため、しばしば好まれます(Webサーバーのトークンが十分に大きい場合のクエリ文字列制限)。

次に、少なくとも MVC のオーバーライドを検討することをお勧めしますAuthorizeAttribute(「標準」MVC 4 パイプライン用と新しい Web API パイプライン用の 2 つがあります。両方のテクノロジを使用している場合は、両方を行う必要があります。 . リンクは、MVC 4 の 1 つ) が Cookie/ヘッダー/クエリ文字列の値を解読するためのものです。そこで、値を取得し、トークンを復号化し、ユーザーを識別し、ロールを設定できます。その属性のコア コードには、ユーザーが認証されているかどうか、特定の役割を持っているかどうか、または特定のユーザーであるかどうかに基づいて、要求を拒否するためのロジックが含まれています。

于 2012-07-05T11:05:08.233 に答える
0

非表示のフォーム要素として戻すか、ajax ポストバックのクエリ文字列で戻すことはできませんか?

global.asmx でポスト バック値を取得するためのフックの例

protected void Session_Start(object src, EventArgs e)
    {
        if(!string.IsNullOrEmpty(Request.Form["MY_HIDDEN_FIELD_NAME"]))
        {
            Session["MY_SESSION_NAME"] = Request.Form["MY_HIDDEN_FIELD_NAME"]
        }
    }
于 2012-07-05T10:45:02.810 に答える
0

ajaxリクエストを送信するときは、リクエストヘッダーでアクセストークンを送信することをお勧めします

xhr.setRequestHeader('custom-header', 'value');

サーバー側では、リクエストヘッダーを取得できます

于 2012-07-05T10:48:41.433 に答える