Pertanyaan Bagaimana cara mengotentikasi pengguna saat memanggil layanan WCF menggunakan AJAX?


Saya memiliki layanan WCF yang perlu dipanggil dari sisi klien (panggilan ajax). Saya ingin menggunakan ScriptManager pada halaman ASPX untuk menambahkan ServiceReference ke layanan WCF (atau) JQuery ajax call ke layanan WCF. Saya ingin menolak pengguna anonim mengakses layanan WCF. Apakah ada cara untuk melakukan otentikasi pengguna sebelum memanggil metode layanan dari JavaScript? bagaimana cara mengamankan panggilan layanan WCF saya dari sisi klien?


4
2017-08-18 03:39


asal


Jawaban:


Ada sejumlah hal yang dapat Anda lakukan untuk mengamankan layanan WCF Anda. Mungkin cara termudah adalah jika layanan Anda sudah menjadi bagian dari keseluruhan aplikasi ASP.NET yang ada untuk mengaktifkan Mode Kompatibilitas ASP.NET untuk layanan Anda. Jika aplikasi ASP.NET Anda menggunakan otentikasi untuk memvalidasi pengguna (misalnya bentuk otentikasi) dan Anda mengaktifkan itu melalui cookie sesi, maka Mode Kompatibilitas ASP.NET melakukan sebagian besar dari itu bekerja untuk Anda.

Secara default, ini dinonaktifkan, tetapi Anda dapat mengaktifkannya dengan tambahan pada web.config Anda:

<system.serviceModel>
        ...
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        ...
</system.serviceModel>

Ini akan mengaktifkan mode kompatibilitas untuk semua layanan Anda dalam aplikasi Anda. Anda juga dapat mengaktifkan ini pada layanan dengan basis layanan dengan mengatur nilai web.config dan juga menggunakan atribut AspNetCompatibilityRequirements pada kelas layanan Anda bukan antarmuka):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class FooService: IFooService {
}

Ketika Anda mengaktifkan pengaturan ini, Anda memiliki akses ke HttpContext.Current (seperti halaman ASP.NET) dan itu juga akan menegakkan bahwa pengguna harus diautentikasi sebelum mengakses file .svc (seperti Anda harus diautentikasi sebelum mengaksesnya. file aspx). Jika Anda mencoba mengakses file .svc tanpa diautentikasi, dan Anda menggunakan otentikasi formulir, pemanggil akan dialihkan ke halaman login default dan, setelah otentikasi yang berhasil, akan dialihkan ke file .svc.

Saran ini membuat beberapa asumsi:

  • layanan Anda dalam aplikasi ASP.NET;
  • Anda menggunakan beberapa jenis otentikasi ASP.NET (seperti bentuk otentikasi) untuk memvalidasi kredensial pengguna dan mempertahankan tiket validasi dalam cookie;

Saran ini, meskipun mungkin bukan yang paling aman atau kuat, mungkin yang paling sederhana untuk setidaknya bangun dan berjalan dan mengamankan situs Anda ke tingkat yang wajar.

Ini bagus Artikel intro perpustakaan MSDN pada mode kompatibilitas ASP.NET.

Jika ini berhasil, mungkin langkah selanjutnya adalah melihat sesuatu seperti otentikasi HMAC (yang melibatkan sedikit lebih banyak pekerjaan dan koordinasi kunci rahasia - tetapi IMHO pasti lebih aman). Berikut ini jalan bagus untuk menerapkannya - http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/22/how-to-implement-hmac-authentication-on-a-restful-wcf-service.aspx

Saya harap ini membantu. Semoga berhasil!!


5
2017-08-23 02:04



Saya tidak yakin apakah ini akan membantu tetapi saya menempatkan lapisan antara WCF dan webapp saya. Saya akan membuat panggilan servicereference AJAX ke asmx lokal. Ini datang di bawah perlindungan bentuk tiket otentikasi. Asmx kemudian akan melakukan pemeriksaan keamanan lebih lanjut (jika pengguna tertentu yang membuat panggilan diizinkan untuk meminta data tersebut atau membentuk data berdasarkan pengguna) dan kemudian meneruskan panggilan ke layanan WCF saya.

Dengan cara ini lapisan layanan saya tidak perlu tahu tentang pengguna untuk setiap aplikasi yang mengaksesnya dan hanya memiliki kekhawatiran untuk pengiriman data yang diminta.

Webservice asmx mengambil tanggung jawab keamanan.

Lalu saya membuat WCF yang dihosting di IIS menggunakan WS dan hanya mengizinkan akses Windows Auth untuk identitas yang digunakan kolam aplikasi webapp.

Begitu:

ASPX -> ASMX WebService -> WCF

Saya pikir itu akan memberi Anda kontrol / pemisahan dan keamanan yang Anda minta?


2
2017-08-27 10:37



untuk layanan web http WCF Satu-satunya cara untuk mengamankan endpoint Web adalah mengeksposnya melalui HTTPS, menggunakan keamanan transportasi. Ketika menggunakan keamanan berbasis pesan, informasi keamanan biasanya ditempatkan di header SOAP dan karena pesan yang dikirim ke endpoint non-SOAP tidak mengandung amplop SOAP, tidak ada tempat untuk menempatkan informasi keamanan dan Anda harus bergantung pada keamanan transportasi.


0
2017-08-25 14:55