Giáo trình Lập trình Web Service

Tóm tắt bài học An toàn thông tin trên Internet là một vấn đề chung hiện nay.Sự an toàn web service lại càng cần được sự quan tâm hơn nữa, khi các thông tin nhạy cảm như tài khoản cá nhân ở ngân hàng có thể bị đánh cắp. Yêu cầu cho một chuẩn an toàn chung cần thiết cần được đáp ứng gồm: - Identification: định danh được những ai truy cập tài nguyên hệ thống. - Authentication: chứng thực tư cách truy cập tài nguyên của người muốn sử dụng. - Authorization: cho phép giao dịch khi đã xác nhận định danh người truy cập. - Integrity: toàn vẹn thông tin trên đường truyền. - Confidentiality: độ an toàn, không ai có thể đọc thông tin trên đường đi. - Auditing: kiểm tra, tất cả các giao dịch đều được lưu lại để kiểm tra. - Non-repudiation: độ mềm dẻo, cho phép chứng thực tính hợp pháp hóa của thông tin đến từ một phía thứ ba ngoài 2 phía là người gửi và người nhận. Hiểu về một số kiểu giả mạo, đánh cắp thông tin và cách phòng chống. Bảo mật Web Service có hai hình thức bảo mật chính, đó là bảo mật trên kênh truyền và bảo mật ở mức thông điệp.Hiện nay hầu hết các dịch vụ đều kết hợp cả hai hình thức để tối ưu cho việc bảo mật. Thực hiện bảo mật Web Service với thư viện WSE 3.0 do Microsoft cung cấp. Xây dựng dịch vụ Web bảo mật với Visual Studio - ASP.NET, triển khai và công bố dịch vụ Web. Đồng thời xây dựng ứng dụng để khai thác và sử dụng chuẩn kết nối bảo mật vừa xây dựng.

pdf86 trang | Chia sẻ: hachi492 | Ngày: 06/01/2022 | Lượt xem: 301 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Giáo trình Lập trình Web Service, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
iceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ToolboxItem(false)] public class ConvertWS : System.Web.Services.WebService { private const double USD_RATE = 20000; private const double EUR_RATE = 30000; [WebMethod] public double VND2USD(double dong) { return dong/USD_RATE; } [WebMethod] public double VND2EUR(double dong) { return dong / EUR_RATE; } [WebMethod] public double USD2VND(double usd) { return usd * USD_RATE; } Lập trình Web Service Trang 29 / 86 Chương IV: Khai thác Web Service [WebMethod] public double EUR2VND(double eur) { return eur * EUR_RATE; } } } Chạy ứng dụng bằng cách nhấn F5, VS sẽ triển khai ứng dụng. Kết quả như sau Kiểm tra WSDL của service, ta nhấn link “Service Description” ta có Lập trình Web Service Trang 30 / 86 Chương IV: Khai thác Web Service Để thử service, ta có thể chọn bất kỳ link nào trong 4 link EUR2VND, USD2VND VND2EUR, VND2USD. Ở đây ta thử link USD2VND, kết quả như sau Lập trình Web Service Trang 31 / 86 Chương IV: Khai thác Web Service Nhập usd có giá trị 100, nhấn Invoke, kết quả nhận được là Vậy Web Service đã hoạt động và cung cấp trên Internet để các dịch vụ khách có thể truy vấn và sử dụng. 3. Xây dựng Web Service với Java Công cụ sử dụng bao gồm: Netbeans 7.4 và ngôn ngữ lập trình Java. a. Tạo mới JSP Web Application Mở menu của Netbeans, chọn File > New Project, ta chọn mục Java Web và chọn Web Application ở cửa sổ bên cạnh, chọn Next. Lập trình Web Service Trang 32 / 86 Chương IV: Khai thác Web Service Đặt tên FlowerAlbumService cho project, chọn thư mục lưu giữ project. Để các tùy chọn khác mặc định và chọn Next. Cửa sổ Server and Settings mở ra, ta chọn GlassFish server and Java EE version Java EE 6 Web hoặc Java EE 7 Web. Chọn Finish, FlowerAlbumService project được tạo và trong cửa sổ Project ta thấy như sau Lập trình Web Service Trang 33 / 86 Chương IV: Khai thác Web Service b. Thêm Resource vào project Chọn chuột phải vào Source Packages và chọn New > Java Package Đặt tên vn.edu.designglobal.resources và chọn Finish. Lập trình Web Service Trang 34 / 86 Chương IV: Khai thác Web Service Ta copy các ảnh sau (tìm trong phần tài nguyên của giáo trình) vào trong mục Resources  rose.jpg  sunflower.jpg  aster.jpg  honeysuckle.jpg Ta sẽ thấy như hình sau c. Thêm mới Web Service Trong phần này, ta sẽ tạo Web service kèm với thuộc tính Stateless session bean, theo các bước chính sau  Tạo hàm cho phép lấy tên và đối tượng Image tương ứng  Tạo hàm cho phép lấy Thumbnails của tất cả danh mục Image và trả về thông qua đối tượng List Ta thực hiện trình tự các bước sau: Chọn chuột phải vào project FlowerAlbumService, chọn New > Web Service. Tại cửa sổ mở ra, ta đặt tên FlowerService, chọn package vn.edu.designglobal.services. Chọn Create Web Service from Scratch và chọn Implement Service as Stateless Session Bean. Click chọn Finish để hoàn tất. Lập trình Web Service Trang 35 / 86 Chương IV: Khai thác Web Service Sau khi tạo xong, ta sẽ thấy Web service xuất hiện trong cửa sổ project như hình sau Lập trình Web Service Trang 36 / 86 Chương IV: Khai thác Web Service Mở file FlowerService.java trong cửa sổ soạn thảo của Netbeans, ta chuyển sang chế độ xem Design. Một cửa sổ xuất hiện cho phép ta thêm các hàm và theo dõi chất lượng (QoS) cho Web Service. Chọn Add Operation để thêm mới các hàm cung cấp bởi dịch vụ. - Đặt tên getFlower cho hàm - Chọn kiểu dữ liệu trả về java.awt.Image. - Bên thẻ Parameters, chọn Add, đặt tên name cho tham số và chọn kiểu dữ liệu java.lang.String mặc định. Xem hình sau Lập trình Web Service Trang 37 / 86 Chương IV: Khai thác Web Service Chọn thẻ Exceptions, thêm khai báo ngoại lệ IOException cho hàm Lập trình Web Service Trang 38 / 86 Chương IV: Khai thác Web Service Chọn OK và đóng cửa sổ, tương tự, ta sẽ thêm khai báo hàm cho Web service như sau - Name: getThumbnails - Return type: java.util.List - Exception: IOException Cửa sổ Design hiển thị các hàm getFlower, getThumbnails và khi chuyển sang chế độ xem List view ta sẽ thấy như sau d. Xây dựng hàm cho Web Service Lập trình Web Service Trang 39 / 86 Chương IV: Khai thác Web Service Chuyển sang chế độ Source View, ta thêm khai báo sau vào file FlowerService.java mã nguồn như sau  Hàm getFlower trả về Image theo tên dịch vụ khách yêu cầu private byte[] getFlowerBytes(String name) throws IOException { URL resource = this.getClass().getResource("/org/flower/resources/"+name+".jpg"); return getBytes(resource); } Hàm nhận đầu vào là tên ảnh và tìm tới đường dẫn chứa ảnh trong thư mục chứa của Web Service để trả về đối tượng Image tương ứng dưới định dạng mảng byte. private byte[] getBytes(URL resource) throws IOException { InputStream in = resource.openStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; for(int read; (read = in.read(buf)) != -1;) { bos.write(buf, 0, read); } return bos.toByteArray(); } Hàm nhận đầu vào là đường dẫn ảnh vật lý trực tiếp, đọc file theo từng block 1024 byte và lưu vào đối tượng InputStream để trả về dưới định dạng mảng byte. private Image getImage(byte[] bytes, boolean isThumbnail) throws IOException { ByteArrayInputStream bis = new ByteArrayInputStream(bytes); Object source = bis; // File or InputStream ImageInputStream iis = ImageIO.createImageInputStream(source); Iterator readers = ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader = (ImageReader) readers.next(); ImageReadParam param = reader.getDefaultReadParam(); if (isThumbnail) { param.setSourceSubsampling(4, 4, 0, 0); } reader.setInput(iis, true); return reader.read(0, param); } Lập trình Web Service Trang 40 / 86 Chương IV: Khai thác Web Service Hàm sẽ tạo đối tượng ImageInputStream từ mảng byte đầu vào. Và sử dụng đối tượng Interator để đăng ký danh sách các đối tượng xử lý ImageReader giải mã định dạng ảnh jpeg. Nếu hàm yêu cầu tạo ra định dạng Thumbnails (param.setSourceSubsampling(4, 4, 0, 0)) của ảnh thông qua biến isThumbnails. Cuối cùng, ImageReader sẽ xử lý đối tượng ImageInputStream để cho ra đối tượng Image được biểu diễn bởi mảng byte đầu vào. Thực thi phương thức getFlower của Web Service như sau @WebMethod(operationName = "getFlower") public Image getFlower(@WebParam(name = "name") String name) throws IOException { byte[] bytes = getFlowerBytes(name); return getImage(bytes, false); } Từ đầu vào là tên ảnh, hệ thống sẽ tìm trong thư mục lưu trữ ảnh với tên tương ứng. Khi tìm thấy, đường dẫn ảnh sẽ được trả lại và hàm getFlowersBytes sẽ đọc và trả về nội dung ảnh trong mảng byte. Cuối cùng hàm getImage sẽ chuyển đổi mảng byte về đối tượng Image trả về cho dịch vụ khách yêu cầu.  Hàm getThumbnails trả về danh sách thumbnails ảnh có trên server Ta thêm khai báo hằng số chứa mảng danh sách tên ảnh cung cấp bởi server private static final String[] FLOWERS = {"aster", "honeysuckle", "rose", "sunflower"}; Hàm allFlowers sẽ đọc danh sách Image ở trên từ server và trả về trong danh sách mảng byte. private List allFlowers() throws IOException { List flowers = new ArrayList(); for (String flower:FLOWERS) { URL resource = this.getClass().getResource("/org/flower/resources/"+flower+".jpg"); flowers.add(getBytes(resource)); } return flowers; } Hàm getThumbnails xử lý như sau @WebMethod(operationName = "getThumbnails") public List getThumbnails() throws IOException { List flowers = allFlowers(); List flowerList = new ArrayList(flowers.size()); for (byte[] flower : flowers) { Lập trình Web Service Trang 41 / 86 Chương IV: Khai thác Web Service flowerList.add(getImage(flower, true)); } return flowerList; } Từ danh sách mảng byte xử lý bởi hàm allFlowers, ta sẽ duyệt qua danh sách và chuyển đổi từng mảng byte thành đối tượng Image như ở phần trước, các đối tượng Image sẽ được lưu vào danh sách để trả về cho dịch vụ khách yêu cầu. e. Publish và kiểm tra tính sẵn sàng phục vụ của Web Service Chọn chuột phải vào FlowerAlbumService và chọn Deploy. Khi này, Netbeans sẽ khởi động Glashfish server và deploy ra file war của project tới Glashfish. Ta sẽ thấy kết quả như hình sau Ta mở mục Web Services trong khung cửa sổ Project, chọn phải chuột vào FlowerService và chọn Test Web Service Lập trình Web Service Trang 42 / 86 Chương IV: Khai thác Web Service Trên trình duyệt, ta thấy như sau và nhập “rose” vào ô tham số getFlower. Lập trình Web Service Trang 43 / 86 Chương IV: Khai thác Web Service Ấn nút getFlower, ta sẽ thấy trên trình duyệt hiển thị như sau. Lập trình Web Service Trang 44 / 86 Chương IV: Khai thác Web Service Vậy Web Service đã sẵn sàng phục vụ. Tóm tắt bài học Có 4 giai đoạn chính để xây dựng một dịch vụ Web là xây dựng, triển khai, tiến hành và quản lý. Có 3 cách tiếp cận chủ yếu để xây dựng nên một dịch vụ Web, có thể từ một ứng dụng đã có (bottom-up); từ một định nghĩa dịch vụ, WSDL để phát sinh một ứng dụng mới (top-down) hoặc có thể từ một nhóm các dịch vụ Web hiện có, kết hợp lại với nhau để tạo nên các chức năng mới hoặc mở rộng thêm chức năng. Qui trình xây dựng một dịch vụ Web bao gồm các bước sau: - Định nghĩa và xây dựng các chức năng, các dịch vụ mà dịch vụ sẽ cung cấp (sử dụng ngôn ngữ Java chẳng hạn). Lập trình Web Service Trang 45 / 86 Chương IV: Khai thác Web Service - Tạo WSDL cho dịch vụ - Xây dựng SOAP server - Đăng ký WSDL với UDDI registry để cho phép các client có thể tìm thấy và truy xuất. - Client nhận file WSDL và từ đó xây dựng SOAP client để có thể kết nối với SOAP server - Xây dựng ứng dụng phía client (chẳng hạn sử dụng Java) và sau đó gọi thực hiện dịch vụ thông qua việc kết nối tới SOAP server. Lựa chọn một ngôn ngữ, xây dựng các tiến trình nghiệp vụ và chúng ta bắt đầu tạo nên một dịch vụ Web như ý muốn. Sau đó là cung cấp dịch vụ Web này trên Internet. Bài tập Tạo 1 cơ sở dữ liệu tên MyAccount gồm 1 bảng tên UserAccount chứa các thông tin sau: UserName (char 15), Password (char 100), BirthDate (DateTime), Adress (varchar 50), Email (varchar 50) . Tạo 1 Webservice thực hiện các chức năng sau :  AddNewAccount () : phương thức này dung để thêm mới 1 Account và Password được mã hóa theo thuật toán ( MD5 hoặc SHA1, tuy chọn ), trước khi thêm cần kiểm tra Account có tồn tại hay không thông qua phương thức CheckAccount.  DeleteAccount (.): dùng để xóa 1 Account  UpdateAccount(.) : cập nhật thông tin 1 Account.  GetAccount() : lấy tất cả thông tin của các Account.  CheckAccount(.) : Kiểm tra 1 Account có tồn tại hay không Lập trình Web Service Trang 46 / 86 Chương IV: Khai thác Web Service CHƯƠNG IV: KHAI THÁC WEB SERVICE 1. Ứng dụng Window Form kết nối tới Web Service a. Tạo mới ứng dụng Windows Foms Application Tạo ứng dụng Windows Application bằng cách nhấn phải chuột lên Solution trong Solution Explorer, chọn Add > New Project Chọn Template “Windows Form Application”, đặt tên là ConsumeConvertWS, nhấn OK, ta được Mục tiêu: Sau khi kết thúc chương này, bạn có thể:  Hiểu về cách khai thác các dịch vụ Web đã được cung cấp để xây dựng ứng dụng  Nắm vững cách sử dụng công cụ hỗ trợ, ngôn ngữ lập trình để khai thác trên các môi trường khác nhau như C#, Java và các dạng thức ứng dụng khác nhau như Application Form, Web Form Lập trình Web Service Trang 47 / 86 Chương IV: Khai thác Web Service Nhấn chuột phải lên project vừa tạo, chọn “Set as Start Up Project” để đảm bảo project vừa tạo là project sẽ được thực thi khi nhấn F5. b. Thêm tham chiếu tới Web Service vào project Chọn chuột phải vào project, chọn “Add Web Reference”. Gõ vào URL đến WSDL vào ô URL, nhấn nút Go, kết quả như sau Lập trình Web Service Trang 48 / 86 Chương IV: Khai thác Web Service Đặt tên cho là ConvertCurrencyReference, ấn OK, ta sẽ thấy kết quả như sau Lập trình Web Service Trang 49 / 86 Chương IV: Khai thác Web Service c. Tạo giao diện ứng dụng đơn giản Đặt tên cho TextBox là txtMoney, Label hiển thị kết quả là txtKetQua. Thêm đoạn mã thực thi chương trình như sau using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ConsumeConvertWS { public partial class Form1 : Form { private ConsumeConvertWS.convertWS.ConvertWS ws; public Form1() { InitializeComponent(); ws = new ConsumeConvertWS.convertWS.ConvertWS(); } private void VND2USD_Click(object sender, EventArgs e) { double mon = Double.Parse(txtMoney.Text); double usd = ws.VND2USD(mon); lblKetQua.Text = usd.ToString(); } Lập trình Web Service Trang 50 / 86 Chương IV: Khai thác Web Service private void VND2EUR_Click(object sender, EventArgs e) { double mon = Double.Parse(txtMoney.Text); double usd = ws.VND2EUR(mon); lblKetQua.Text = usd.ToString(); } private void USD2VND_Click(object sender, EventArgs e) { double mon = Double.Parse(txtMoney.Text); double usd = ws.USD2VND(mon); lblKetQua.Text = usd.ToString(); } private void EUR2VND_Click(object sender, EventArgs e) { double mon = Double.Parse(txtMoney.Text); double usd = ws.EUR2VND(mon); lblKetQua.Text = usd.ToString(); } } } d. Kiểm tra hoạt động ứng dụng kết nối tới Web Service Ta chọn F5 để thực thi ứng dụng, nhập 100 vào ô Tiền quy đổi, click nút USB2VND. Kết quả, ta thấy như sau 2. Ứng dụng Java Swing kết nối tới Web Service a. Tạo mới ứng dụng Java Application Chọn từ menu Netbeans, chọn File > New Project, chọn mục Java và Java Application bên cạnh. Lập trình Web Service Trang 51 / 86 Chương IV: Khai thác Web Service Cửa sổ New Java Application mở ra, ta đặt tên ClientWebService cho ứng dụng và thiết lập Set as Main Project. Lập trình Web Service Trang 52 / 86 Chương IV: Khai thác Web Service b. Thêm tham chiếu tới Web Service Ta tạo mới package cho project, chọn chuột phải vào project, chọn New > Java Package, cửa sổ mở ra như hình sau. Đặt tên vn.edu.designglobal.servicereferences cho package. Ta thêm tham chiếu tới Web Service cung cấp chức năng chuyển đổi tiền tệ ở trên. Chọn chuột phải vào project, chọn New > Web Service Client ; lựa chọn mục WSDL URL và nhập đường dẫn publish của Web Service ; chọn package để lưu giữ tham chiếu của Web Service như hình sau Lập trình Web Service Trang 53 / 86 Chương IV: Khai thác Web Service Sau khi thêm thành công ta sẽ thấy như hình sau Lập trình Web Service Trang 54 / 86 Chương IV: Khai thác Web Service c. Thiết kế giao diện ứng dụng Thiết kế giao diện ứng dụng như hình sau và F5 để kiểm tra hoạt động ứng dụng, ta sẽ thấy kết quả như sau Đoạn mã nguồn thực thi chương trình như bên dưới Lập trình Web Service Trang 55 / 86 Chương IV: Khai thác Web Service public class ClientWebService extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextField tfMoney, tfDisplay; private JButton btnVND2USD, btnVND2EUR, btnUSD2VND, btnEUR2VND; public ClientWebService() { setTitle("Gọi Web service"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(450, 150); setResizable(false); JLabel lblTitle = new JLabel("CHUYỂN ĐỔI TIỀN TỆ", JLabel.CENTER); lblTitle.setFont(new Font("Arial", Font.BOLD, 18)); this.add(lblTitle, BorderLayout.NORTH); createGUI(); } void createGUI() { JPanel pCen = new JPanel(new GridLayout(2, 1)); JPanel pBot = new JPanel(); this.add(pBot, BorderLayout.SOUTH); this.add(pCen, BorderLayout.CENTER); JPanel p1 = new JPanel(); JLabel l1, l2; p1.add(l1 = new JLabel("Tiền qui đổi:", JLabel.RIGHT)); p1.add(tfMoney = new JTextField(25)); pCen.add(p1); JPanel p2 = new JPanel(); p2.add(l2 = new JLabel("Kết quả:", JLabel.RIGHT)); p2.add(tfDisplay = new JTextField(25)); tfDisplay.setEditable(false); pCen.add(p2); l2.setPreferredSize(l1.getPreferredSize()); pBot.add(btnVND2USD = new JButton("VND2USD")); pBot.add(btnVND2EUR = new JButton("VND2EUR")); pBot.add(btnUSD2VND = new JButton("USD2VND")); pBot.add(btnEUR2VND = new JButton("EUR2VND")); btnVND2USD.addActionListener(this); Lập trình Web Service Trang 56 / 86 Chương IV: Khai thác Web Service btnVND2EUR.addActionListener(this); btnUSD2VND.addActionListener(this); btnEUR2VND.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { Object o = e.getSource(); DesignGlobalWebService stub = new DesignGlobalWebService.(); DesignGlobalWebServiceSoap ws = stub.getDesignGlobalWebServiceSoap(); double dong = Double.parseDouble(tfMoney.getText()); if (o.equals(btnVND2USD)) { try { double result = ws.vnd2USD(dong); tfDisplay.setText(result + ""); } catch (Exception e1) { e1.printStackTrace(); } } else if (o.equals(btnVND2EUR)) { try { double result = ws.vnd2EUR(dong); tfDisplay.setText(result + ""); } catch (Exception e1) { e1.printStackTrace(); } } else if (o.equals(btnUSD2VND)) { try { double result = ws.usd2VND(dong); tfDisplay.setText(result + ""); } catch (Exception e1) { e1.printStackTrace(); } } else if (o.equals(btnEUR2VND)) { try { double result = ws.eur2VND(dong); tfDisplay.setText(result + ""); Lập trình Web Service Trang 57 / 86 Chương IV: Khai thác Web Service } catch (Exception e1) { e1.printStackTrace(); } } } public static void main(String[] args) { new ClientWebService().setVisible(true); } } Vậy ứng dụng hoạt động như thiết kế mong muốn. 3. Ứng dụng Web ASP.NET kết nối tới Web Service a. Tạo mới ứng dụng ASP.NET Web Application Chọn chuột phải solution trong cửa sổ Solution Explorer, chọn mục ASP.NET Web Application, đặt tên WebClientConvertCurrency và chọn thư mục lưu giữ project như hình sau Visual Studio sẽ tạo project với cấu trúc như hình sau Lập trình Web Service Trang 58 / 86 Chương IV: Khai thác Web Service b. Thêm tham chiếu tới Web Service Chọn chuột phải vào project, chọn Add reference để mở cửa sổ thêm tham chiếu tới Web Service như hình sau Lập trình Web Service Trang 59 / 86 Chương IV: Khai thác Web Service Nhập địa chỉ publish của Web Service cần tham chiếu, chọn Go, ta sẽ thấy như hình trên và đặt tên WebConvertCurrencyReference. Ấn nút OK, ta sẽ thấy như hình sau Lập trình Web Service Trang 60 / 86 Chương IV: Khai thác Web Service c. Thiết kế ứng dụng Web Application Thiết kế ứng dụng như hình sau, và chạy thực thi ứng dụng kiểm tra với dữ liệu như hình bên. (mã nguồn tham khảo trong phần Tài nguyên của giáo trình) Vậy ứng dụng Web hoạt động như mong muốn. Lập trình Web Service Trang 61 / 86 Chương IV: Khai thác Web Service Tóm tắt bài học Trong chương này, ta đã học về cách khai thác các dịch vụ Web được cung cấp trên các môi trường khác nhau như .NET Web Service – IIS Server và Java Web Service – Glashfish Server (xây dựng trong chương III). Ta cũng đã học cách xây dựng các ứng dụng trên cơ sở khai thác các dịch vụ Web Service như: - .Net Application Form - Java Application Form - ASP.NET Web Application Bài tập Tạo 1 ứng dụng ASP.Net, sử dụng WebService (bài tập chương III) gồm các trang mô tả như sau : - Trang Login.aspx : kiểm tra Account, trang này link với trang CreateAccount.aspx. Nếu login thành công thì chuyển sang trang MaintainAccount.aspx. - Trang CreateAccount.aspx : dùng để thêm 1 Account.Trên trang này có 1 button dùng để kiểm tra 1 UserName có tồn tại ? mà không cần Postback về Server. Trang này link với trang Login.aspx - Trang MaintainAccount.aspx : trang này gồm 1 GridView cho phép xem , xóa , sửa thông tin Account. Lập trình Web Service Trang 62 / 86 Chương V: Bảo mật trong Web Service CHƯƠNG V: BẢO MẬT TRONG WEB SERVICE 1. Tổng quan về vấn đề bảo mật Cùng với sự phát triển không ngừng của Internet, hệ thống thông tin ngày một phát triển vượt bậc.Khái niệm business không còn giới hạn ở bên trong mà đã phát triển cả ở trên Internet. Khái niệm thương mại điện tử ra đời là sự minh chứng cho sự phát triển đó.Tuy nhiên, đi cùng với sự phát triển đó thì vấn đề an toàn của nó cũng là một vấn đề nóng và cấp bách.Tuy không có khái niệm về sự an toàn tuyệt đối nhưng cũng phải cần một cơ chế an toàn thích hợp để khai thác thương mại trên Internet.Các giải pháp hiện nay đang được sử dụng như mã hóa khóa,chữ ký số có thể đảm bảo ở một mức nào đó.Nhưng cũng phải cần không ngừng hoàn thiện và phát triển các giải pháp đó để đảm bảo phù hợp hơn trên môi trường Internet. An toàn thông tin trên Internet là một vấn đề chung hiện nay.Sự an toàn web service lại càng cần được sự quan tâm hơn nữa, khi các thông tin nhạy cảm như tài khoản cá nhân ở ngân hàng có thể bị đánh cắp. Điều gì xảy ra nếu sử dụng business service mua hàng, chứng khoán,chuyển tiền mà không có một sự bảo đảm an toàn cần thiết. Đây là một chuẩn an toàn chung cần thiết cần được đáp ứng: - Identification: định danh được những ai truy cập tài nguyên hệ thống. - Authentication: chứng thực tư cách truy cập tài nguyên của người muốn sử dụng. - Authorization: cho phép giao dịch khi đã xác nhận định danh người truy cập. Mục tiêu: Sau khi kết thúc chương này, bạn có thể:  Hiểu về vấn đề bảo mật trên Internet và Web Service đáp ứng chuẩn an toàn cơ bản  Hiểu về một số kiểu giả mạo, đánh cắp thông tin và cách phòng chống  Thực hiện bảo mật Web Service với thư viện WSE 3.0 do Microsoft cung cấp.  Xây dựng dịch vụ Web bảo mật với Visual Studio - ASP.NET, triển khai và công bố dịch vụ Web.  Đồng thời xây dựng ứng dụng để khai thác và sử dụng chuẩn kết nối bảo mật vừa xây dựng. Lập trình Web Service Trang 63 / 86 Chương V: Bảo mật trong Web Service - Integrity: toàn vẹn thông tin trên đường truyền. - Confidentiality: độ an toàn, không ai có thể đọc thông tin trên đường đi. - Auditing: kiểm tra, tất cả các giao dịch đều được lưu lại để kiểm tra. - Non-repudiation: độ mềm dẻo, cho phép chứng thực tính hợp pháp hóa của thông tin đến từ một phía thứ ba ngoài 2 phía là người gửi và người nhận. Những yêu cầu trên giúp cho hệ thống an toàn hơn, tránh được phần nào những truy cập không hợp lệ. HTTP (HyperText Transfer Protocol) là giao thức thường sử dụng nhất cho việc trao đổi thông tin trên Internet, tuy nhiên không an toàn, bởi vì tất cả thông tin được gửi dưới dạng văn bản trong mạng ngang hàng không an toàn. HTTP thuộc về nhóm của những nghi thức như SMTP, telnet, và FTP, được thiết kế trong giai đoạn đầu của Internet khi mà vấn đề an toàn chưa được quan tâm đến nhiều. Một phát triển của HTTP là HTTPS, nó là một chuẩn an toàn cho HTTP. HTTPS cho phép chứng thực client và server qua những chứng thực giữa client và server. Trước khi có web servives security ( WS-Security ) thì ý nghĩa thông thường của an toàn web service là bảo mật kênh truyền dữ liệu. Nó được thực hiện cho những SOAP/HTTP dựa trên cơ chế truyền thông điệp bằng cách sử dụng giao thức HTTPS. Không giống sự an toàn mức thông điệp, HTTPS cung cấp sự an toàn tới toàn bộ gói dữ liệu HTTP. Bởi vậy, chúng ta không có một tùy chọn nào để áp dụng sự an toàn có chọn lọc chỉ trên những thành phần của một thông điệp. Mặc dầu HTTPS không bao phủ tất cả các khía cạnh trong chuẩn an toàn chung nhưng nó cũng đã cung cấp một mức bảo chứng đầy đủ với định danh và chứng thực, sự toàn vẹn thông điệp, và độ tin cậy. Tuy nhiên, authentication, auditing, and nonrepudiation chưa được cung cấp. Bên cạnh đó, HTTPS là một giao thức nên khi thông điệp đi qua HTTP server thì lại không an toàn. 2. Một số kiểu giả mạo, đánh cắp thông tin và cách phòng chống: 2.1. Message Replay Attack Message Replay là một kiểu tấn công trên mạng kiểu bắt và gửi lại gói tin mà client đã gửi cho server. Lập trình Web Service Trang 64 / 86 Chương V: Bảo mật trong Web Service Trong quá trình này Attacker như một trung gian của client và server, nó bắt gói tin client và sao chép gói tin đó,chỉnh sửa và gửi lại cho server.Và nếu server có gửi lại cho client thì Attacker cũng có thể bắt được. Ta phải ngăn chặn việc gửi lại gói tin kiểu này bởi vì các gói tin gửi đi sẽ gây ra không nhất quán dữ liệu, các thông tin gửi đi bị sai lệch ảnh hưởng đến client,việc gửi replayed message liên tục và một cách tự động sẽ làm chết server. Giải pháp cho vấn đề này là sử dụng cache lưu lại tên định danh cho message và server sẽ loại bỏ các message có định danh bị trùng.Như vậy các message có một tên định danh duy nhất được gửi đi và chắc chắn rằng các message không bị giả mạo trong quá trình truyền. Web service security đã cung cấp việc sử dụng Usernametoken trong đó có thẻ username và password. ... ... ... ... Các giá trị Nonce được tạo ra ngẫu nhiên cùng với Created là thời gian mà message được gửi đi.Các giá trị này đều được Hash để che dấu thông tin. Lập trình Web Service Trang 65 / 86 Chương V: Bảo mật trong Web Service Giá trị thời gian mà message phải được đồng bộ với thời gian của server.Khi gói tin đến server thì server sẽ giới hạn khoảng thời gian mà message đến,nếu vượt ra khoảng thời gian giới hạn gói tin bị loại bỏ. 2.2. Web Spoofing Web spoofing là một kiểu lừa đảo trên web phổ biến hiện nay.Có 4 kiểu web spoofing là IP spoofing,ARP spoofing,Web spoofing,DNS spoofing. a. Ip spoofing Chứng minh mình thực sự tin cậy với một máy khác nhằm hợp pháp việc truy cập máy đó và có thể lấy được username, password (có máy giả mạo giả mạo server hoặc client). Máy khác trở thành đồng phạm vì đã để cho máy giả mạo sử dụng IP giả mạo trùng với IP của máy đó.Kiểu tấn công này thường xảy ra ở các máy client khi độ bảo mật an toàn ở các máy đó không được cao. Để tránh kiểu tấn công này thì server và client đều có định danh xác thực lẫn nhau. b. Web spoofing Người giả mạo tạo ra bản sao của một trang web và đánh lừa người dùng click vào. Cách thực hiện :đặt trang web giả mạo liên kết với trang web thông dụng. Khi sử dụng mail kích hoạt web mail,attacker gửi mail đến giới thiệu link đến web giả. Kẻ giả mạo còn đánh lừa máy tìm kiếm web để nó trỏ vào web giả. Khi user request đén server và sever trả về url của web đó. Người giả mạo có thể hướng người dùng truy cập đến trang web của họ để dễ dàng đánh cắp thông tin. Đây là kiểu tấn công thường xuyên và phổ biến hiện naykhi lừa một cách trực tiếp đến người dùng cuối.Cách này thông thường kẻ giả mạo đánh lừa người dùng cuối chứ khó có thể giả mạo client thực sự của web service. Lập trình Web Service Trang 66 / 86 Chương V: Bảo mật trong Web Service c. DNS spoofing Cách hoạt động của DNS server : Giao thức Domain Naming System (DNS) như được định nghĩa trong RFC 1034/1035 có thể được xem như là một trong những giao thức quan trọng nhất được sử dụng trong Internet. Nói ngắn ngọn để dễ hiểu, bất cứ khi nào bạn đánh một địa chỉ web chẳng hạn như vào trình duyệt, yêu cầu DNS sẽ được đưa đến máy chủ DNS để tìm ra địa chỉ IP tương xứng với tên miền mà bạn vừa nhập. Các router và các thiết bị kết nối Internet sẽ không hiểu google.com là gì, chúng chỉ hiểu các địa chỉ chẳng hạn như 74.125.95.103. Máy chủ DSN làm việc bằng cách lưu một cơ sở dữ liệu các entry (được gọi là bản ghi tài nguyên) địa chỉ IP để bản đồ hóa tên DNS, truyền thông các bản ghi tài nguyên đó đến máy khách và đến máy chủ DNS khác. Kiến trúc máy chủ DNS trong toàn doanh nghiệp và Internet là một thứ khá phức tạp. Như một vấn đề của thực tế, bạn có thể hình dung chúng như các quyển sổ chuyên dụng cho kiến trúc DNS. Người giả mạo cố tình cung cấp sai thông tin DNS để lừa nạn nhân truy cập vào 1 địa chỉ mà attacker chỉ định nhằm đánh cắp các thông tin như TK ngân hàng, Giải pháp cho vấn đề này là cung cấp một DNS server tin cậy và khi sử dụng dịch vụ DNS phải có chứng thực. d. ARP spoofing Arp là giao thức hoạt động ở tầng 2 cho phép ánh xạ địa chỉ MAC. Giao thức ARP được thiết kế để phục vụ cho nhu cầu thông dịch các địa chỉ giữa các lớp thứ hai và thứ ba trong mô hình OSI. Lớp thứ hai (lớp data-link) sử dụng địa chỉ MAC để các thiết bị phần cứng có thể truyền thông với nhau một cách trực tiếp. Lớp thứ ba (lớp mạng), sử dụng địa chỉ IP để tạo các mạng có khả năng mở rộng trên toàn cầu. Lớp data-link xử lý trực tiếp với các thiết bị được kết nối với nhau, còn lớp mạng xử lý các thiết bị được kết nối trực tiếp và không trực tiếp. Mỗi lớp có cơ chế phân định địa chỉ riêng và chúng phải Lập trình Web Service Trang 67 / 86 Chương V: Bảo mật trong Web Service làm việc với nhau để tạo nên một mạng truyền thông. Với lý do đó, ARP được tạo với RFC 826, “một giao thức phân định địa chỉ Ethernet - Ethernet Address Resolution Protocol”. Quá trình truyền ARP bao gồm request và respone. Khi gói Arp request được gửi đi kẻ giả mạo bắt được thông tin đó và gửi trả về cho người gửi và bảng ARP của máy đó sẽ cập nhật địa chỉ của giả mạo. Cách phòng chống vấn đề này là đảm bảo mức an toàn ở mạng nội bộ. Vẫn còn một số kiểu lừa đảo qua mail nhưng kiểu giả mạo lừa đảo đó thì phải cần sự cảnh giác của client. e. SSL spoofing: SSL và HTTPS Phá hủy cơ chế HTTPS: HTTPS là một kênh thông tin an toàn.Khi đã thiết lập được một kết nối từ máy chủ đến máy khách thì rất khó để có thể phá vỡ được kết nối đó.Tuy nhiên mọi việc đều có thể xảy ra khi máy khách vẫn chưa thật sự kết nối được với máy chủ. Kết nối HTTPS an toàn tuy nhiên ta có thể phá vỡ cấu trúc đó trước khi kết nối được thiết lập bằng phương pháp “man in the middle”.Chặn request từ client đến server để trở thành kẻ thứ ba trong phiên kết nối. Quá trình thực hiện như sau: Lập trình Web Service Trang 68 / 86 Chương V: Bảo mật trong Web Service Lưu lượng giữa máy khách và máy chủ đầu tiên sẽ bị chặn. Khi bắt gặp một HTTPS URL, sslstrip sẽ thay thế nó bằng một liên kết HTTP và sẽ ánh xạ những thay đổi của nó. Máy tấn công sẽ cung cấp các chứng chỉ cho máy chủ web và giả mạo máy khách. Lưu lượng được nhận trở lại từ website an toàn và được cung cấp trở lại cho máy khách. Quá trình làm việc khá tốt, máy chủ có liên quan vẫn nhận lưu lượng SSL mà không hề biết về sự khác biệt này. Nếu không để ý thì rất khó phát hiện điều dị thường khi kết nối. 3. Bảo mật trong web service Ngày nay công nghệ web services đã và đang được triển khai và ứng dụng trong rất nhiều lĩnh vực khác nhau bao gồm cả những lĩnh vực nhạy cảm, đòi hỏi tính an toàn cao như tài chính, ngân hàng, Do đó web service cần cung cấp một mức an toàn đủ để hỗ trợ những công việc như thế. Bên cạnh mặt được của công nghệ web services mang lại thì việc đảm bảo an toàn, tin cậy, toàn vẹn thông tin trao đổi trên web service cũng là một điều rất quan trọng trong quá trình xây dựng web services, bằng việc sử dụng ws security và các thành phần của nó giúp cho thông tin trao đổi trên web services trở nên an toàn hơn. Trước hết chúng ta xem xét những nhân tố rủi ro ảnh hưởng đến mức an toàn của những ứng dụng dựa trên web service. Chúng ta sẽ sử dụng một kịch bản rút tiền ngân hàng qua mạng để xem xét vấn đề. Đây là một ứng dụng client/ server đơn giản mô tả một người rút tiền (client) kết nối tới trung tâm dữ liệu của ngân hàng để sử dụng một ứng dụng web service để thực hiện yêu cầu của mình. Nếu không có sự an toàn nào đã được áp dụng, thì có ba nhân tố mạo hiểm chính: - Những giao dịch không hợp pháp (Unauthorized transactions) : một người nào đó không có quyền nhưng vẫn yêu cầu rút tiền. Giao dịch này không hợp pháp. Chúng ta cấm vấn đề này bằng cách sử dụng cơ chế chứng thực của WS - Security. Một ví dụ của sự chứng thực bao gồmphải có một kết hợp user ID/ password trong SOAP message. - Những thông báo không mã hóa (Readable messages in clear text-no encryption): số hiệu tài khoản và số dư tài khoản trong gói SOAP rất dễ bị đọc lén trên mạng. Việc lộ thông tin này là do thông tin tài khoản và số dư được gửi qua mạng dưới định dạng văn bản.Để giải quyết vấn đề này, thông tin này phải được mã hóa ở mức kênh chuyển thông điệp hoặc ở mức thông điệp (WS - Security). - Những thông điệp bị thay đổi hoặc mất mát (SOAP message susceptible to modification-no integrity).Trong quá trình chuyển thông tin từ người rút tiền đến trung tâm Lập trình Web Service Trang 69 / 86 Chương V: Bảo mật trong Web Service dữ liệu, nó có thể bị chặn. Và những thông tin này có thể bị thay đổi, ví dụ như số tài khoản là 1234 thì bị thay đổi thành số 9876. Vấn đề này dẫn đến thiếu sự toàn vẹn. Những ví dụ trên, chúng ta đã mô tả sự an toàn liên quan tới những yêu cầu của sự chứng thực, tính bí mật, và sự toàn vẹn thông tin. Trước khi có WS-Security, sự an toàn kênh chuyển thông điệp rất thường được sử dụng. Sự an toàn kênh chuyển thông điệp ở chỗ là nó mã hóa toàn bộ thông điệp, dẫn đến sử dụng CPU cao hơn. Tuy nhiên với WS-Security, nó cung cấp những cách tối ưu hóa những thao tác an toàn, mà yêu cầu ít thời gian sử dụng CPU hơn. Dựa vào mức an toàn cần thiết mà một hoặc nhiều hơn những cơ chế an toàn này có thể được áp dụng cho một ứng dụng. Tuy nhiên việc chọn cơ chế an toàn cho web service phải đòi hỏi sao cho người dùng không cảm thấy quá phức tạp tạo một sự gò bó, do đó việc chọn cơ chế an toàn nào trong ws security thì phụ thuộc nhiều vào loại service và những tính năng mà servive này cung cấp, ví dụ như service về giao dịch tài chính ngân hàng phải có cơ chế an toàn hiệu qủa hơn so với service chọn lọc và phân loại tin tức hay service cho biết tỷ giá trao đổi giữa các loại ngoại tệ,. Bên cạnh đó còn một điểm cần quan tâm đó là sự an toàn không chỉ phụ thuộc vào những giải thuật, những tiêu chuẩn, và những cơ chế mà ws security mang lại, mà nó còn tùy vào thái độ của các công ty có hiểu rõ tầm quan trọng của an toàn thông tin khi triển khai các ứng dụng, giao dịch trên mạng hay không cũng rất cần thiết. Có hai hình thức bảo mật, đó là bảo mật trên kênh truyền và bảo mật ở mức thông điệp.Hiện nay hầu hết các dịch vụ đều kết hợp cả hai hình thức để tối ưu cho việc bảo mật. Bảo mật ở mức kênh truyền : trên kênh truyền phải bảo đảm được thông điệp an toàn và toàn vẹn.Ở mức này thì ta thường dùng kênh truyền an toàn như HTTP + SSL để tạo kết nối an toàn đến client.An toàn ở mức này đòi hỏi cơ sở hạ tầng mạng phải tốt. Bảo mật ở mức thông điệp : để tăng mức độ an toàn cho thông điệp,ta sử dụng thêm WS security cung cấp mức an toàn cho thông điệp.Các dữ liệu được mã hóa và được sử dụng chữ kí số để tránh bị đánh cắp thông tin.Cả hai bên server và client đều sử dụng các key để có thể chứng thực lẫn nhau. Lập trình Web Service Trang 70 / 86 Chương V: Bảo mật trong Web Service Hình ảnh trên là một quá trình sử dụng web service payment trực tuyến Chúng bao gồm các bước : - Người mua đặt mua hàng và gửi thông tin giao dịch và thông tin người mua đến người cung cấp dịch vụ bán hàng. - Hệ thống sẽ chuyển các thông tin đó sang getway rồi từ getway tiếp tục chuyển giao dịch đến cho ngân hàng. - Tất cả các thông tin gửi và nhận đều được mã hóa và thông qua HTTPS. a. Xác thực client và server sử dụng: Việc chuyển tiền thanh toán qua mạng đều thực hiện việc chyển những thông tin rất nhạy cảm và quan trọng nên thực hiện bảo mật an toàn cho nó là điều rất cần thiết.Trong đó có xác thực cả client và server. Lập trình Web Service Trang 71 / 86 Chương V: Bảo mật trong Web Service Client ở đây là nơi đăng ký thông tin và sử dụng dịch vụ web như các trang bán hàng qua mạng. Server là nơi cung cấp dịch vụ và cung cấp cho client mã đăng kí dịch vụ. Cả client và server đều phải xác thực lẫn nhau để tránh việc có người giả mạo đứng giữa giả một trong hai phía. Như vậy cả client và server đều phải có một certificate cho riêng mình được một root CA chứng thực chữ kí số. Chữ ký điện tử được sử dụng trong các giao dịch điện tử. Xuất phát từ thực tế, chữ ký điện tử cũng cần đảm bảo các chức năng: xác định được người chủ của một dữ liệu nào đó: văn bản, ảnh, video,... dữ liệu đó có bị thay đổi hay không. Người gửi sẽ kí bằng cách mã hóa dữ liệu đi kèm với private key của người gửi và người nhận chỉ có thể dùng public key của người gửi để giải mã, mọi public key khác đều không thể giải mã như vậy có thể chứng minh thông tin gửi là của người đó chứ không thể là người khác. Root CA có vai trò cấp certificate cho cặp private và public key đảm bảo các cặp key đó là chính xác. Mã hóa dữ liệu truyền sử dụng công nghệ Public Key Cryptography và TripleDes. Lập trình Web Service Trang 72 / 86 Chương V: Bảo mật trong Web Service Mã hóa sử dụng cặp khóa public key và private key, trong đó public key dùng để mã hóa thông điệp và xác thực chữ kí, còn private key dùng để giải mã thông điệp và tạo chữ kí. Một trong số những giải thuật mã hóa thông dụng nhất hiện nay là RSA. RSA là giải thuật mã hóa được đánh giá là tốt nhất và được sử dụng rộng rãi nhất hiện nay do Rivest, Shamir và Adleman phát triển tại MIT vào năm 1978 [RIVE78]. b. Sử dụng protocol HTTPS Trước khi có HTTPS thì HTTP(HyperText Transfer Protocol) là giao thức được sử dụng để truyền thông tin trên Internet dưới dạng văn bản text và ngang hàngkhông an toàn.Cùng với các giao thức SMTP, telnet,FTP trong những ngày đầu phát triển Internet khi vấn đề bảo mật chưa được quan tâm đúng mức.HTTPS ra đời và sự phát triển của HTTPS đảm bảo dữ liệu an toàn hơn trên đường truyền cho phép client và server chứng thực nhau. Dưới đây là quá trình bắt tay của Client và server khi sử dụng HTTPS. Lập trình Web Service Trang 73 / 86 Chương V: Bảo mật trong Web Service Hypertext Transfer Protocol Secure (HTTPS) là một sự kết hợp của Hypertext Transfer Protocol (HTTP) với giao thức SSL / TLS để cung cấp một kênh truyền mà dữ liệu được mã hóa và bảo mật an toàn với máy chủ. Các kết nối HTTPS thường được sử dụng cho các giao dịch thanh toán trên mạng toàn cầu và cho các giao dịch nhạy cảm trong hệ thống thông tin doanh nghiệp. Sử dụng HTTPS đảm bảo dữ liệu được truyền đi bảo mật, an toàn trên một mạng không an toàn và tránh được midle-attack miễn là máy chủ đã được xác thực và đáng tin cậy. Sử dụng HTTPS tuy không thể nói là đảm bảo tuyệt đối nhưng cũng đã đáp ứng được việc chứng thực và an toàn dữ liệu. Tuy nhiên, authentication, auditing, and nonrepudiation chưa được cung cấp. Lập trình Web Service Trang 74 / 86 Chương V: Bảo mật trong Web Service c. Soap Header extension Như các phần đã trình bày ở trên việc sử dụng dịch vụ được thực hiện bởi việc gửi các thông tin yêu cầu qua Soap message. Ta sẽ mở rộng phần soap message và đưa vào đó phần mở rộng của soap tăng thêm tính an toàn cho thông tin. Phần mở rộng của Soap cho phép mở rộng cho soap message bằng cách thêm và chỉnh sửa thông tin bên trong Soap message.Ta có thể hiện thực mã hóa hoặc sử dụng các giải thuật nén XML Web service. Chu trình của XML web service. Quá trình Serialize : Sau khi các thông tin cần chuyển đã được đưa vào soap message và chuẩn bị gửi.Trong quá trình này ta có thể lấy các thông tin ra và mã hóa. Quá trình Deserialize : quá trình chuẩn bị nhận soap message.Nếu ta đã mã hóa thông tin thì trong quá trình này ta có thể lấy thông tin ra và giải mã trả về kết quả Với Soap extension thì ta có thể mã hóa và giải mã thông tin ở một nơi khác nơi mà ta gọi yêu cầu cho service. Trước khi gửi thông tin từ soap message đến server ta override lại Soap message nếu cần thiết, thêm vào đó các thông tin đã được mã hóa và gửi đi. 4. Thực hiện bảo mật trong web service Mục tiêu: - Tạo Web service Hello và bảo mật thông qua User name và Password, gồm 3 phần  Service SecureWebService.asmx  Ứng dụng client kết nối tới service Lập trình Web Service Trang 75 / 86 Chương V: Bảo mật trong Web Service  Đóng gói thư viện bảo mật Web Service - Service sẽ trả về thông tin "Hello Authenticated user " nếu User name và Password so khớp và trả về thông tin thông báo "Please format the request as a SOAP request and try again." nếu trái lại. 4.1. Cài đặt WSE 3.0 Download gói cài từ Microsoft tại link sau us/download/details.aspx?id=6545 a. Tích hợp WSE 3.0 vào Visual Studio 2008, 2010, 2012, 2013 Sau khi cài đặt thành công WSE 3.0, ta cần khởi động lại máy và không bật Visual Studio trong quá trình cấu hình. Ta sẽ thấy thư mục WSE như sau Vào thư mục sau %ALLUSERSPROFILE%\Application Data\Microsoft\MSEnvShared\AddIns Trong thư mục ta sẽ tìm thấy file WSESettingsVS3.AddIn, trước khi chỉnh sửa ta sẽ cần backup lại file này. Ta sẽ chỉnh sửa nội dung như hình sau Lập trình Web Service Trang 76 / 86 Chương V: Bảo mật trong Web Service Ta sẽ thêm vào các khối bôi đỏ tương ứng cho Visual Studio 2008, 2010, 2012, 2013. Tới thư mục C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE (cho VS2012) hoặc C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE (cho VS2008) hoặc C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE (cho VS 2010) hoặc C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE (cho VS 2013). Mở file devenv.exe.config và thêm những dòng sau (nhớ backup lại file trước khi chỉnh sửa) Lập trình Web Service Trang 77 / 86 Chương V: Bảo mật trong Web Service Tới đây ta đã tích hợp thành công WSE 3.0 vào công cụ Visual Studio Chú ý: nếu hệ thống không cho phép chỉnh sửa trực tiếp các file trên, ta sẽ tạo ra file mới và ghi đè lên file cần chỉnh sửa. 4.2. Xây dựng ứng dụng bảo mật Web service thông qua bảo mật thông điệp SOAP với WS-Security a. Tạo mới Web Service với WSE 3.0 Lập trình Web Service Trang 78 / 86 Chương V: Bảo mật trong Web Service Tạo ứng dụng bảo mật Web service đặt tên SecureWebService.asmx như sau Thêm tham chiếu tới thư viện WSE 3.0 đã cài đặt, chọn Add Reference và chọn tới file Microsoft.Web.Services3.dll trong thư mục đã cài đặt WSE. Lập trình Web Service Trang 79 / 86 Chương V: Bảo mật trong Web Service Ta thêm khai báo sử dụng thư viện tới file SecureWebService.asmx như sau using Microsoft.Web.Services3; using Microsoft.Web.Services3.Security.Tokens; b. Thực thi Secure Web Service [WebMethod] public string Hello(string name) { //Get the current soap context SoapContext ctxt = RequestSoapContext.Current; if (ctxt == null) { //This request is using a different protocol other than SOAP. return "Please format the request as a SOAP request and try again."; } //Iterate through all Security tokens foreach(SecurityToken tok in ctxt.Security.Tokens) { if (tok is UsernameToken) { UsernameToken user = (UsernameToken)tok; return "Hello Authenticated user " + user.Username; } } return "Hello Liar"; } Trong đoạn mã trên, ta lặp qua các thông tin bảo mật Header vì mỗi thông điệp SOAP có thể chứa nhiều khai báo Header. Sau đó, tìm kiếm chắc chắn rằng có khai báo UsernameToken trong đó. Ta sẽ F5 để chạy ứng dụng Web Service để cho phép nó sẵn sàng phục vụ Lập trình Web Service Trang 80 / 86 Chương V: Bảo mật trong Web Service c. Tạo ứng dụng client kết nối tới SecureWebService Tạo project Console Application đặt tên ClientSecureWebService như hình sau Thêm tham chiếu tới thư viện WSE 3.0 đã cài đặt, chọn Add Reference và chọn tới file Microsoft.Web.Services3.dll trong thư mục đã cài đặt WSE. Thêm tham chiếu tới Secure Web service vừa tạo, bằng cách cung cấp URL như hình sau và đặt tên SecureWSReference Lập trình Web Service Trang 81 / 86 Chương V: Bảo mật trong Web Service Ta thêm khai báo sử dụng thư viện tới file program.cs như sau using Microsoft.Web.Services3; using Microsoft.Web.Services3.Security.Tokens; Phần thực thi service như sau [STAThread] static void Main(string[] args) { Console.Write("Enter Name: "); string name = Console.ReadLine(); Console.Write("Enter Password: "); string password = Console.ReadLine(); SecureWSReference.SecureWebServiceSoapClient proxy = new SecureWSReference.SecureWebServiceSoapClient(); Lập trình Web Service Trang 82 / 86 Chương V: Bảo mật trong Web Service proxy.RequestSoapContext.Security.Tokens.Add(new UsernameToken(name, password, PasswordOption.SendHashed)); proxy.RequestSoapContext.Security.Timestamp.TtlInSeconds = 300; Console.WriteLine(proxy.Hello(name)); Console.WriteLine("Hit enter to end."); Console.ReadLine(); } Trong đoạn mã trên, thành phần UsernameToken được đóng gói vào trong SOAP Header và gửi đi và Password được băm nhờ giải thuật SHA1 trước khi gửi. Nhờ đó, việc bảo mật thông tin trong thành phần SOAP Header dựa vào WS-Security là rất đảm bảo. Bên cạnh đó, client hoàn toàn có thể cấu hình thời gian Timeout trong trao đổi thông điệp để tăng cường khả năng chống tấn công từ bên ngoài Ở trên, ta thấy WS-Security đã dùng cơ chế UsernameToken để bảo mật thông tin trong SOAP Header. Tuy nhiên, với những ứng dụng yêu cầu phải có khả năng xác thực phức tạp hơn, như kiểm thông tin tài khoản có được lưu trữ trong Cơ sở dữ liệu, Do đó, ta cần đóng gói thành thư viện riêng để đảm nhận xử lý các bussiness logic phức tạp tùy thuộc vào yêu cầu của hệ thống. Tạo mới project Class Library như sau Lập trình Web Service Trang 83 / 86 Chương V: Bảo mật trong Web Service Chọn chức năng hỗ trợ WSE bằng cách chuột phải vào project và chọn WSE 3.0 Setting. Đổi tên Class1.cs thành CustomAuthenticator.cs và nhập vào nội dung như sau [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] public class CustomAuthenticator : UsernameTokenManager { //Returns the password or password equivalent for a user name protected override string AuthenticateToken(UsernameToken token) { if (token == null) throw new ArgumentNullException(); if (token.Username == "hoand") return "mypassword"; else return null; } } Ở đây, ta có lớp CustomAuthenticator kế thừa từ lớp quản lý UsernameTokenManager và ghi đè phương thức AuthenticateToken xử lý xác thực. Vậy ta đã có thư viện đảm nhận việc xác thực thông tin UsernameToken nằm trong SOAP Header gửi tới. Thư viện này sẽ đảm nhận việc xử lý bussiness logic phức tạp và được sử dụng bởi Server và tránh việc lộ các thông tin quan trong đối với bất cứ thành phần nào khác. Để sử dụng lại thư viện này ở các project khác, ta cần build ra file WSESecurity.dll và sẽ được tham chiếu tới bởi các Web service project. Thêm nữa là ta cần tích hợp nó vào luồng xử lý WSE pipeline của các Web service bằng cách khai báo thêm (dưới thẻ ) vào file web.config như sau <securityTokenManager qname="wsse:UsernameToken" type="WSESecurity.CustomAuthenticator, WSESecurity" xmlns:wsse=" oasis-200401-wss-wssecurity-secext-1.0.xsd"/> Lập trình Web Service Trang 84 / 86 Chương V: Bảo mật trong Web Service Thư viện Web Service Enhancement 3.0cung cấp một phương thức đơn giản nhưng hết sức tuyệt vời để quản lý bảo mật trao đổi thông điệp trong Web Service. Module xử lý xác thực hoàn toàn có thể cập nhật lại bussiness logic mà không cần phải biên dịch lại Web Service thông qua thư viện WSESecurity xử lý riêng như ta đã thực hiện ở trên. 5. Tổng kết Để có được sự an toàn trong việc truyền tải dữ liệu cần phải thực hiện càng nhiều biện pháp bảo mật càng tốt.Tuy nhiên việc kết hợp các biện pháp bảo mật cũng phải tránh rườm rà phức tạp cho người sử dụng và vẫn đảm bảo được tốc độ truyền tải dữ liệu. Tóm tắt bài học An toàn thông tin trên Internet là một vấn đề chung hiện nay.Sự an toàn web service lại càng cần được sự quan tâm hơn nữa, khi các thông tin nhạy cảm như tài khoản cá nhân ở ngân hàng có thể bị đánh cắp. Yêu cầu cho một chuẩn an toàn chung cần thiết cần được đáp ứng gồm: - Identification: định danh được những ai truy cập tài nguyên hệ thống. - Authentication: chứng thực tư cách truy cập tài nguyên của người muốn sử dụng. - Authorization: cho phép giao dịch khi đã xác nhận định danh người truy cập. - Integrity: toàn vẹn thông tin trên đường truyền. - Confidentiality: độ an toàn, không ai có thể đọc thông tin trên đường đi. - Auditing: kiểm tra, tất cả các giao dịch đều được lưu lại để kiểm tra. - Non-repudiation: độ mềm dẻo, cho phép chứng thực tính hợp pháp hóa của thông tin đến từ một phía thứ ba ngoài 2 phía là người gửi và người nhận. Hiểu về một số kiểu giả mạo, đánh cắp thông tin và cách phòng chống. Bảo mật Web Service có hai hình thức bảo mật chính, đó là bảo mật trên kênh truyền và bảo mật ở mức thông điệp.Hiện nay hầu hết các dịch vụ đều kết hợp cả hai hình thức để tối ưu cho việc bảo mật. Thực hiện bảo mật Web Service với thư viện WSE 3.0 do Microsoft cung cấp. Xây dựng dịch vụ Web bảo mật với Visual Studio - ASP.NET, triển khai và công bố dịch vụ Web. Đồng thời xây dựng ứng dụng để khai thác và sử dụng chuẩn kết nối bảo mật vừa xây dựng. Bài tập Lập trình Web Service Trang 85 / 86 Chương V: Bảo mật trong Web Service Tiếp tục thực hiện xây dựng ứng dụng Web kết nối tới Web Service bảo mật với cơ chế WSE 3.0. Lập trình Web Service Trang 86 / 86 Phụ lục I: Tài nguyên và tài liệu tham khảo PHỤ LỤC I: Tài nguyên và tài liệu tham khảo  Java Software Environment:  Netbeans IDE : https://netbeans.org/downloads/  Visual Studio:  WSE 3.0:  Link down mã nguồn toàn bộ các ví dụ trong giáo trình: C#, ASP.NET: ConvertCurrency - Java Web Service: FlowerAlbum - Java Client Web Service:

Các file đính kèm theo tài liệu này:

  • pdfgiao_trinh_lap_trinh_web_service.pdf