7

Ajax で Web サービスを使用したい。ajaxを使用してWebサービスを呼び出すときのセキュリティのための最良の方法は何ですか? アプリケーションからのリモート呼び出しから保護したい。

たとえば、次のWebサービスがあります。

[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class Users : System.Web.Services.WebService
    {

        [WebMethod]
        public List<User> GetUsers()
        {
            List<User> listUsers = new List<User>();
            User user = new User();
            user.Id = 1;
            user.Name = "John";

            User user2 = new User();
            user2.Id = 2;
            user2.Name = "Martin";


            listUsers.Add(user);
            listUsers.Add(user2);

            return listUsers;
        } 
    }
}

jquery ajax を使用して Web サービスを呼び出します。

<script type="text/javascript">
    $(function () {

        getUsers();


        function getUsers() {

            $.ajax({
                type: "POST",

                url: "Webservices/Users.asmx/GetUsers",

                data: "{}",

                contentType: "application/json; charset=utf-8",

                dataType: "json",

                success: function (response) {

                    var users = response.d;

                    $.each(users, function (index, user) {

                        console.log(user.Name);

                    });

                },

                failure: function (msg) {
                }
            });
        }
    });
</script>
4

3 に答える 3

10

最善の方法などというものはなく、答えは常にit dependsですが、それは非常に役に立ちません。たとえば、フォーム認証を使用できます。Web サービスを使用する Web アプリケーションと Web サービスが同じ の一部であるASP.NET application場合、ブラウザは Web サービスへの呼び出しごとにフォーム認証チケット (Cookie) をシームレスに送信できます。

構成ファイルでは、次のことができます

<authorization>
        <deny users="?" />
</authorization>

これにより、匿名ユーザーへのアクセスが拒否され、Web サービスも対象になります。つまり、ユーザーがログインしてチケットで有効な Cookie を取得しない限り、サービスを使用することはできません。もちろん、する必要がありHTTPSます。そうしないと、途中の誰かがヘッダーで Cookie を取得し、サービスを呼び出すことができます。

最後に、絶対的な意味で、アプリケーションの外部で誰も Web サービスを呼び出さないことを保証することはできません。上記のアプローチにより、途中でサービスが呼び出されないようになります。ただし、Web サービスの呼び出し元は JavaScript であり、JavaScript で構築したセキュリティは、ユーザーがスクリプトを見たり、ブラウザとの間のトラフィック。少し技術的なエンド ユーザーは、要求を再生したり、要求を変更したり、有効な資格情報を使用して Web サービスに送信したりできます。

編集:-

FormsAuthentication を有効にするために必要な詳細は次のとおりです。

(1)Web.configの の下<system.web>に、これがあることを確認します。

<authentication mode="Forms">
     <forms loginUrl="Login.aspx" defaultUrl="~/" />
</authentication>
<authorization>
     <deny users="?" />
</authorization>

これにより、認証されていない (匿名の) すべてのユーザーが Login.aspx にリダイレクトされます。

(2)Login.aspxログインロジックを実装して、ユーザーIDとパスワードを取得し、データベースなどに対して検証します。認証が成功したら、つまり、ユーザーが入力した ID とパスワードがデータベースにあるものと一致したら、ログイン ボタンのクリック ハンドラーにある可能性があり、チケットを設定します。

protected void Button1_Click(object sender, EventArgs e)
{
    // Do all your login logic here
    // once user ID and password entered by the user are okay, call this

    string ticket = FormsAuthentication.Encrypt(
                        new FormsAuthenticationTicket("userId", false, 15));
    HttpCookie FormsCookie = new HttpCookie(
               FormsAuthentication.FormsCookieName, ticket) { HttpOnly = true };
    HttpContext.Current.Response.Cookies.Add(FormsCookie);
}

PrincipalPermissionAttribute(3)このように Web メソッドに追加します。

public class Users : System.Web.Services.WebService
{
    [PrincipalPermissionAttribute(SecurityAction.Demand)]
    [WebMethod]
    public List<User> GetUsers()
    {
        // Same code as what you have now
    }
}

ここで任意のページに移動すると、login.aspx にリダイレクトされ、そこでユーザー ID とパスワードを入力してログインする必要があります。ログイン時に、フォーム認証 Cookie が作成され、応答に書き込まれます。それ以降は、アプリケーションへのすべてのリクエストで Cookie が取り込まれます (ブラウザが自動的に行います)。ログインせずに Web サービスに直接アクセスすると、ログイン ページにリダイレクトされます。最初の回答で述べたように、ログインしたユーザーは引き続き Web サービスに直接アクセスできます。JavaScript ができることは、ユーザーも同じことができます。

ところで、Web サービス (asmx) は非推奨のテクノロジです。

于 2013-07-07T14:26:54.913 に答える
2

これは議論の非常に重要なトピックです。それを行うには多くの方法があります。

私たちは個人的に API に Service Stack を使用し、API にアクセスするときにキーを使用します。キーは、クライアントとサーバーで同じままの GUID です。クライアントとサーバーが同じシステムである場合、キーの送信に問題はありません。

セキュリティを確保するための非常に詳細な方法がここにあり ます http://www.stormpath.com/blog/secure-your-rest-api-right-way http://codebetter.com/johnvpetersen/2012/04/02/making- your-asp-net-web-apis-secure/

また、 PHP/MYSQL を使用したセキュアなパブリック API の構築の例についても説明します。

于 2013-07-10T07:05:54.260 に答える