Xây dựng các dịch vụ web với an ninh ở mức chuyển tải bằng cách sử dụng
Rational Application Developer V7, Phần 2 : Định cấu hình cho xác thực cơ
sở HTTP
Henry Cui, Kỹ sư phần mềm, IBM
Tóm tắt: Phần 1 của loạt bài hướng dẫn này đã hướng dẫn bạn từng bước xây
dựng một dịch vụ web cho một ứng dụng máy tính cầm tay đơn giản. Bạn đã tạo
ra các dị
ch vụ web và kiểm thử hai loại hình trình khách dịch vụ Web khác nhau -
trình khách Java ™ Platform, Enterprise Edition (Java EE) và trình khách Java độc
lập - và xử lý các trường hợp ngoại lệ do người dùng định nghĩa trong các dịch vụ
web. Bài thứ hai này của loạt bài gồm ba phần chỉ cho bạn cách định cấu hình xác
thực cơ sở HTTP cho các dịch vụ web của bạn và trình khách dịch vụ web và giám
sát các thông tin xác thực cơ sở HTTP bằng cách sử dụng trình giám sát TCP/IP.
Trước khi bạn bắt đầu
V
ề loạt bài hướng dẫn này
Nếu bạn đã qua phần 1 của loạt bài hướng dẫn này, thì bạn đã:
• Thiết lập các máy chủ.
• Tạo Java bean.
• Tạo các dịch vụ web.
• Tạo trình khách Java EE của dịch vụ web.
• Tạo trình khách Java độc lập của dịch vụ Web.
Phần 2 của hướng dẫn này được xây dựng dựa trên Phần 1, chỉ cho các bạn cách
làm thế nào để định cấu hình cho xác thực cơ sở HTTP. Tại đây bạn sẽ:
• Bật cho phép bảo đảm an ninh của WebSphere® Application Server của
IBM®.
• Định cấu hình việc xác thực cơ sở HTTP cho các bên cung cấp dịch vụ web.
• Định cấu hình việc xác thực cơ sở HTTP cho trình khách dịch vụ web bằng
cách sử dụng một bộ miêu tả triển khai.
• Định cấu hình việc xác thực cơ sở HTTP cho trình khách dịch vụ web bằng
lập trình.
mới hơn của Rational Application Developer tại thời điểm cài đặt. Mỗi phiên bản
mới của Rational Application Developer có chứa số lượng lớn các phần đã sửa
chữa. Chúng tôi khuyên bạn nên cài đặt các phiên bản mới nhất để tránh gặp các
vấ
n đề đã được sửa chữa.)
Kích hoạt bảo đảm an ninh của WebSphere Application Server
Trong các phiên bản trước của WebSphere Application Server, khi một người
dùng bật chế độ bảo đảm an ninh tổng thể, thì cả bảo đảm an ninh về quản trị và
bảo đảm an ninh ứng dụng đều được bật. Từ WebSphere Application Server phiên
bản V6.1 trở đi, khái niệm bảo đảm an ninh tổng thể được chia thành bảo đảm an
ninh về quản trị và bảo đảm an ninh ứng dụ
ng, bạn có thể kích hoạt riêng rẽ từng
chế độ bảo đảm an ninh. Bảo đảm an ninh ứng dụng chỉ có hiệu lực khi bảo đảm
an ninh về quản trị được kích hoạt. Để kích hoạt tính năng xác thực cơ sở HTTP,
thì máy chủ WebSphere Application Server phải chạy khi cả hai loại bảo đảm an
ninh quản trị và bảo đảm an ninh ứng dụng được kích hoạt.
Trong phần này, bạn kích hoạt chế
độ bảo đảm an ninh trên máy chủ. Bạn sử dụng
sổ đăng ký người sử dụng của hệ điều hành tại máy cục bộ để xác thực người dùng.
Sau khi bảo đảm an ninh được kích hoạt, bạn cần phải thông báo các cài đặt quản
trị của bạn từ môi trường phát triển tới máy chủ đang chạy thi hành để bạn có thể
thiết lập một quan hệ tin cậy giữa bàn làm việc (workbench) phát triển và máy chủ.
Bật chế độ bảo đảm an ninh trên máy chủ
Trước tiên, bạn định cấu hình cho máy chủ chạy với chế độ bảo đảm an ninh đã
được kích hoạt:
1. Bạn phải chắc chắn rằng WAS v6.1 for Web services provider (máy chủ
ứng dụng WebSphere v6.1 cho bên cung cấp dịch vụ Web) đã khởi chạy.
2. Tại khung nhìn Servers, nhấn chuột phải vào WAS v6.1 for Web services
provider và chọn
Run administrative console (chạy bàn quản trị).
t khẩu. ID của người dùng xác định quản
trị viên của bàn điều khiển quản trị của WebSphere. Nó phải giống như ID
mà bạn đã nhập trong hộp thoại Security Configuration Wizard của bàn
điều khiển quản trị của WebSphere. Bạn chọn Automatically trust server
certificate during SSL handshake như ở hình 2.
Hình 2. Chỉ rõ thông tin về bảo đảm an ninh trong trình biên tập cấu
hình của máy chủ
4. Ghi lưu và đóng trình biên tập cấu hình của máy chủ lại.
5. Khởi chạy máy chủ WebSphere Application Server V6.1 cho bên cung cấp
dịch vụ web.
6. Nhấn chuột phải vào WAS v6.1 for Web service provider và chọn Run
administrative console.
7. Bạn sẽ thấy bàn điều khiển quản trị đã được bảo mật như ở hình 3. Nhập ID
người sử dụng của bạn và mật khẩu để
đăng nhập.
Hình 3. Bàn điều khiển quản trị đã được bảo mật
Xác định cấu hình xác thực cơ sở HTTP cho nhà cung cấp dịch vụ web
Việc xác thực cơ sở HTTP sử dụng mô hình xác thực hiện có của Java EE. Trình
biên tập bộ miêu tả triển khai Web được sử dụng để cấu hình thông tin về ai là
người có quyền để truy cập vào các dịch vụ web, kiểu phương thức xác thực nào
được sử dụng, và các mẫu URL và các phương thức HTTP nào được bảo vệ. Trình
biên tập bộ miêu t
ả triển khai ứng dụng được sử dụng để thu thập các vai trò bảo
mật, thêm người sử dụng hoặc các nhóm vào các vai trò đó.
Định cấu hình cho bộ mô tả triển khai Web
1. Tại khung nhìn Project Explorer, mở rộng dự án web Calculator, sau đó
Hình 5. Thêm tài nguyên Web
16. Nhấn Finish.
17. Tại phần Authorized Roles nhấn Add.
18. Nhập Valid role vào làm nội dung mô tả, chọn webservicesrole (xem hình
6), sau đó nhấn Finish.
Hình 6. Thêm ràng buộc về cấp quyền
19. Ghi lưu và đóng bộ mô tả triển khai Web.
Về đầu trang
Định cấu hình cho bộ mô tả triển khai ứng dụng
1. Tại khung nhìn Package Explorer, mở rộng dự án ứng dụng doanh nghiệp
CalculatorEAR, và nhấn đúp chuột vào mục Deployment Descriptor:
CalculatorEAR. Trình biên tập bộ mô tả triển khai ứng dụng mở ra.
2. Nhấn phiếu Security sau đó nhấn Gather. Thao tác này thu thập tất cả các
vai trò bảo đảm an ninh được định nghĩa trong tất cả các mô-đ
un. Bạn sẽ
thấy vai trò webservicesrole đã được bổ sung.
3. Bây giờ bạn nhấn mục webservicesrole, mà bạn vừa thu thập được. Sau đó
tại mục WebSphere Bindings, bạn chọn Users/Groups.
4. Tại phần Users, bạn nhấn Add.
5. Tại hộp thoại Users, bạn nhập một tên người dùng hợp lệ. Vì máy chủ
WebSphere Application Server được cấu hình để sử dụng sổ đăng ký người
sử dụng của hệ điều hành tại máy cục bộ, bạn phải nhập một tài khoản
người dùng hợp lệ có thể được hệ điều hành của bạn xác thực. Để đơn giản,
bạn có thể chỉ cần sử dụng tên người quản trị chính mà bạn đã sử dụng
trong thủ thuật định cấu hình bảo đảm an ninh vì rằng tên người sử dụng
Hình 8. Xác định một máy chủ mới
6. Nhấn phương thức add(int,int) và nhập các giá trị để kiểm tra. Kết quả sẽ
hiển thị ngoại lệ: ( 401 ) Unauthorized.
7. Hãy xem bàn điều khiển của máy chủ WebSphere Application Server. Bạn
sẽ thấy lỗi như trong liệt kê 1.
Liệt kê 1. Lỗi không được cấp phép
WebServicesFault
faultCode: HTTP
faultString: ( 401 ) Unauthorized
faultActor: http://localhost:9080
faultDetail:
null: WSWS3192E: Error: return code:
( 401 ) Unauthorized
.
( 401 ) Unauthorized
Xin chúc mừng! Dịch vụ Web đã được bật chế độ xác thực cơ sở HTTP và chỉ
người sử dụng được phép mới có thể truy cập các dịch vụ web.
Xác định cấu hình xác thực cơ sở HTTP cho trình khách dịch vụ Web bằng cách
sử dụng bộ mô tả triển khai
Bạn có thể định cấu hình xác thực cơ sở HTTP hoặc bằng cách sử
dụng trình biên
tập bộ mô tả triển khai hoặc thiết lập nó bằng mã lệnh trong chương trình. Trong
phần này, bạn định cấu hình xác thực cơ sở HTTP bằng cách sử dụng trình biên
tập bộ mô tả triển khai Web.
1. Tại khung nhìn Package Explorer, mở rộng dự án web
import javax.xml.rpc.Stub;
4. Xác định vị trí các dòng lệnh trong tệp CalculatorProxy.java như tại liệt kê
2.
Liệt kê 2. Mã lệnh cần được thay đổi
if (_useJNDI) {
try {
javax.naming.InitialContext ctx = new
j
avax.naming.InitialContext();
__calculator = ((com.ibm.CalculatorService)ctx.
lookup("java:comp/env/service/CalculatorService")).getCalculator();
}
5.
6. Thực hiện các thay đổi như được tô đậm trong liệt kê 3.
Liệt kê 3. Thiết lập các thông tin xác thực cơ sở bằng mã lệnh trong
chương trình
if (_useJNDI) {
try {
javax.naming.InitialContext ctx = new
j
avax.naming.InitialContext();
__calculator = ((com.ibm.CalculatorService)ctx.
lookup("java:comp/env/service/CalculatorService")).getCalculator();
public class TestCalculator {
public static void main(String[] args) {
try {
CalculatorProxy proxy = new
CalculatorProxy();
Calculator calculator =
proxy.getCalculator();
((javax.xml.rpc.Stub)calculator).
_setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY,
"xxxxxxxx");
((javax.xml.rpc.Stub)calculator).
_setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY,
"xxxxxxxx");
System.out.println("2 + 2 = " +
proxy.add(2, 2));
System.out.println("2 - 2 = " +
proxy.subtract(2, 2));
System.out.println("4 * 2 = " +
proxy.multiply(4, 2));
System.out.println("4 / 2 = " +
proxy.divide(4, 2));
System.out.print("4 / 0 = ");
System.out.print(proxy.divide(4, 0));
} catch (DivideByZeroException e) {
System.out.println("Error: can't divide
by zero!");
} catch (RemoteException e) {
e.printStackTrace();