Sản phẩm của chúng tôi đăng ký người chơi mới trên dịch vụ của chúng tôi và chúng tôi đã chọn lưu trữ nó trên Azure (chúng tôi đang sử dụng .NET) và chúng tôi muốn nó không trạng thái (cho khả năng mở rộng) và tương đối an toàn.
Vì đây là REST WS đầu tiên tôi viết, tôi muốn nhận được một số phản hồi về việc đó có phải là một giải pháp vững chắc hay không.
Một số giả định để biết về ứng dụng của chúng tôi:
- Người dùng đăng nhập vào dịch vụ ẩn danh mà không yêu cầu mật khẩu từ người dùng
- WS phải hoàn toàn không trạng thái để cho phép mở rộng theo chiều ngang
- Chúng tôi đang kết nối bằng HTTPS (SSL) để ngăn chặn rình mò bên thứ 3
BIÊN TẬP:
- Chúng tôi nhắm mục tiêu cho các thiết bị iOS / Android gốc
- Mối quan tâm chính của chúng tôi là đảm bảo chỉ những khách hàng không bị giả mạo mới có thể gửi yêu cầu
Và quy trình xác thực trừu tượng:
- Máy khách tạo một hàm băm đơn giản (UDID: Dấu thời gian) và mã hóa nó bằng dấu thời gian với một số thuật toán cơ bản (ví dụ: khóa bí mật là mỗi ký tự thứ 2 từ hàm băm)
- Máy khách gửi UDID, Dấu thời gian & hàm băm của mình đến máy chủ
- Máy chủ xây dựng lại hàm băm và giải mã hàm băm được mã hóa được gửi từ người dùng
- Nếu hai cái bằng nhau - chúng tôi biết rằng nó thực sự được gửi từ khách hàng của chúng tôi (và hy vọng không phải từ một người gửi độc hại)
Bất kỳ đầu vào / đề xuất nào cũng sẽ rất tuyệt - rõ ràng vì đây là lần đầu tiên tôi xử lý vấn đề này, tôi có thể đã thiết kế nó không chính xác.
Cảm ơn!
Cập nhật lần 2:
Đọc thông số kỹ thuật bảo mật cho OAuth, dường như không có câu trả lời thực sự cho câu hỏi của tôi - vì máy khách và máy chủ phải biết các khóa bí mật và máy khách được lưu trữ cục bộ trên thiết bị di động của người dùng của chúng tôi (trái ngược với ứng dụng web).
Từ hướng dẫn bảo mật OAuth ( http://hueniverse.com/oauth/guide/security/ ):
Khi thực hiện OAuth, điều quan trọng là phải hiểu những hạn chế của các bí mật được chia sẻ, đối xứng hoặc không đối xứng. Bí mật máy khách (hoặc khóa riêng) được sử dụng để xác minh danh tính của máy khách bởi máy chủ. Trong trường hợp máy khách dựa trên web như máy chủ web, việc giữ bí mật máy khách (hoặc khóa riêng) là tương đối dễ dàng.
Tuy nhiên, khi ứng dụng khách là ứng dụng trên máy tính để bàn, ứng dụng dành cho thiết bị di động hoặc bất kỳ phần mềm phía máy khách nào khác như applet trình duyệt (Flash, Java, Silverlight) và tập lệnh (JavaScript), phải có thông tin đăng nhập của khách hàng trong mỗi bản sao của ứng dụng . Điều này có nghĩa là bí mật của máy khách (hoặc khóa riêng) phải được phân phối cùng với ứng dụng, vốn đã thỏa hiệp chúng.
Điều này không ngăn chặn việc sử dụng OAuth trong ứng dụng đó, nhưng nó giới hạn mức độ tin cậy mà máy chủ có thể có trong các bí mật công khai đó. Vì các bí mật không thể tin cậy được, nên máy chủ phải coi ứng dụng đó là các thực thể không xác định và chỉ sử dụng danh tính khách hàng cho các hoạt động không yêu cầu bất kỳ mức độ tin cậy nào, chẳng hạn như thu thập số liệu thống kê về các ứng dụng. Một số máy chủ có thể chọn cấm ứng dụng đó hoặc cung cấp các giao thức hoặc tiện ích mở rộng khác nhau. Tuy nhiên, tại thời điểm này không có giải pháp được biết đến cho giới hạn này.