Tôi có ứng dụng web này sẽ là tất cả công nghệ phía máy khách (HTML, CSS, JavaScript / AngularJS, v.v ...). Ứng dụng web này sẽ tương tác với API REST để truy cập và sửa đổi dữ liệu. Ngay bây giờ vẫn chưa quyết định loại hệ thống xác thực mà API REST sẽ sử dụng.
Theo hiểu biết của tôi, bất kỳ loại hệ thống xác thực API nào (Khóa API, OAuth 1/2, v.v ...) sẽ có một số dữ liệu nhất định cần được giữ bí mật nếu không quyền truy cập có thể bị xâm phạm. Đối với Khóa API, bản thân các khóa cần phải được giữ bí mật, đối với OAuth 2, mã thông báo khách hàng / mã thông báo truy cập / mã thông báo làm mới cần được giữ bí mật, tôi chắc chắn một vài trong số 4 khóa liên quan đến OAuth 1 cần được giữ bí mật (không phải quá nhiều kinh nghiệm với OAuth 1). Tôi đã cố gắng suy nghĩ liệu có cách nào để lưu trữ nội dung bí mật này trong một ứng dụng web phía máy khách thuần túy mà không có lớp giữa của các loại máy chủ.
Tôi đã cố gắng nghĩ về điều này và tôi không thể nghĩ ra nơi nào để làm điều đó. Ý tôi là tôi không thể lưu trữ nó trong javascript vì bất kỳ ai cũng có thể xem nguồn hoặc mở giao diện điều khiển và lấy dữ liệu. Tôi không chắc chắn 100% mức độ an toàn của localStorage và liệu người dùng có thể truy cập / sửa đổi dữ liệu đó hay không. Ngay cả khi lưu trữ cục bộ là an toàn, hai cách tôi có thể nghĩ về việc lấy dữ liệu vào đó là không. Một cách là chỉ lưu trữ dữ liệu trong mã nguồn javascript, đó là điều không an toàn nhất mà tôi có thể nghĩ đến. Bây giờ nếu tôi đang sử dụng một cái gì đó như OAuth 2 trong đó chính api còn lại sẽ cung cấp cho tôi mã thông báo, thì nó vẫn không an toàn (tốt hơn tùy chọn đầu tiên) bởi vì những mã thông báo đó sẽ được trả lại dưới dạng văn bản thuần túy mà bất kỳ ai cũng có thể nhìn thấy yêu cầu máy tính đang thực hiện có thể nhìn thấy.
Có cách nào để ứng dụng chạy hoàn toàn phía máy khách có thể lưu trữ các mẩu dữ liệu bí mật một cách an toàn mà không cần một lớp giữa nào đó ở phía máy chủ không?