Trong ứng dụng của tôi, tôi thực hiện cuộc gọi HTTP đến dịch vụ web qua HTTPS. Mong muốn của tôi là thiết kế khách hàng của tôi theo cách mà nó chỉ yêu cầu người dùng cho tên người dùng và mật khẩu của họ khi có một thách thức xác thực. Tôi muốn được phản ứng, không phải ưu tiên. Do tính chất của ứng dụng của tôi, có một số trường hợp nhất định mà nó không cần phải xác thực.Cách trả lời các thách thức xác thực HTTP trong Android
Trong iOS, quá trình này được thực hiện rất dễ dàng qua NSURLConnectionDelegateProtocol, được triển khai trong phiên bản ứng dụng iOS của tôi. Một kết nối được thực hiện bằng cách sử dụng lớp này, và chỉ khi một thách thức được trình bày thì lớp yêu cầu đại biểu của nó cho các chứng chỉ xác thực.
Làm cách nào để thực hiện điều này trong Android? Sử dụng AuthenticationHandler? Hoặc có lẽ là Authenticator? Nếu có, ví dụ hoặc hướng dẫn có thể được cung cấp không?
Sửa 1:
Sử dụng lớp Authenticator (xem câu trả lời của tôi dưới đây) bây giờ tôi có thể đáp ứng với những thách thức xác thực, nhưng hiện tại chỉ với thông tin mã hóa cứng. Tôi muốn nhắc người dùng nhập tên người dùng và mật khẩu. Theo số Android documentation, trong phương thức getPasswordAuthentication
bạn "thường nhắc người dùng nhập dữ liệu bắt buộc".
Làm cách nào có thể? Nếu không chặn luồng giao diện người dùng mà tôi biết không thể/không nên được thực hiện, làm cách nào bạn có thể hiển thị hộp thoại, đợi đầu vào của người dùng, sau đó truy xuất thông tin xác thực đã nhập và trả lại, tất cả trong phương thức đó?
Chỉnh sửa 2:
Trong khi có rất ít hoặc không có ví dụ về việc sử dụng các lớp Authenticator, những gì tôi đã có thể để tìm thấy khiến người sử dụng cho đầu vào là không thể từ bên trong một phương pháp đơn lẻ, như getPasswordAuthentication
. Có thể phải trở lại client Apache Http ...
cuối cùng Sửa:
tôi vẫn đang sử dụng HttpURLConnection, nhưng làm điều gì đó dọc theo dòng của những gì Edward gợi ý dưới đây. Có vẻ như không có bất kỳ lớp cấu hình nào để xử lý các thách thức xác thực và nhắc người dùng nhập liệu, vì vậy tôi làm điều này bằng tay.
Tôi cũng đang cố gắng sử dụng java.net, vì có vẻ như đó sẽ là tùy chọn được hỗ trợ nhiều nhất trong tương lai. Tôi sẽ thử những gì bạn đã đề xuất. Bạn đã từng sử dụng lớp Authenticator chưa? – Groppe
Xem các chỉnh sửa của tôi ở trên. –
Cảm ơn. Từ những gì tôi đã đọc, thật không may, một hộp thoại (những gì tôi muốn làm) không thể thực hiện được trong phương thức getPasswordAuthentication của Authenticator. – Groppe