Làm rõ: Mobile App = Ứng dụng gốc
Như đã nêu trong các nhận xét khác và một số nguồn trực tuyến, ngầm có vẻ như là một sự phù hợp tự nhiên cho các ứng dụng dành cho thiết bị di động, tuy nhiên giải pháp tốt nhất không phải lúc nào cũng rõ ràng (và trên thực tế, ẩn không được khuyến khích vì những lý do được thảo luận bên dưới).
Các phương pháp hay nhất về OAuth2 cho ứng dụng gốc
Dù bạn chọn cách tiếp cận nào (có một vài điểm cần cân nhắc), bạn nên chú ý đến các phương pháp hay nhất được nêu ở đây cho Ứng dụng gốc sử dụng OAuth2: https://tools.ietf.org/html/rfc8252
Xem xét các tùy chọn sau
Ngầm hiểu
Tôi có nên sử dụng ẩn?
Trích dẫn từ Phần 8.2 https://tools.ietf.org/html/rfc8252#section-8.2
Luồng ủy quyền cấp phép ngầm định của OAuth 2.0 (được định nghĩa trong Mục 4.2 của OAuth 2.0 [RFC6749]) thường hoạt động với thông lệ thực hiện yêu cầu ủy quyền trong trình duyệt và nhận phản hồi ủy quyền thông qua giao tiếp liên ứng dụng dựa trên URI.
Tuy nhiên, vì quy trình ngầm định không thể được bảo vệ bởi PKCE [RFC7636] (bắt buộc trong Phần 8.1), việc sử dụng Quy trình ngầm định với các ứng dụng gốc KHÔNG ĐƯỢC KHUYẾN CÁO .
Mã thông báo truy cập được cấp thông qua quy trình ngầm định cũng không thể được làm mới nếu không có sự tương tác của người dùng, làm cho quy trình cấp mã ủy quyền - có thể phát hành mã thông báo làm mới - tùy chọn thiết thực hơn cho các ủy quyền ứng dụng gốc yêu cầu làm mới mã thông báo truy cập.
Mã ủy quyền
Nếu bạn sử dụng Mã ủy quyền, thì một cách tiếp cận sẽ là ủy quyền thông qua thành phần máy chủ web của riêng bạn, giúp làm phong phú thêm các yêu cầu mã thông báo với bí mật của ứng dụng khách để tránh lưu trữ nó trên ứng dụng phân phối trên thiết bị.
Trích dưới đây từ: https://dev.fitbit.com/docs/oauth2/
Quy trình Cấp mã ủy quyền được khuyến nghị cho các ứng dụng có dịch vụ web. Luồng này yêu cầu giao tiếp giữa máy chủ với máy chủ bằng cách sử dụng bí mật máy khách của ứng dụng.
Lưu ý: Không bao giờ đặt bí mật máy khách của bạn trong mã được phân phối, chẳng hạn như các ứng dụng được tải xuống qua cửa hàng ứng dụng hoặc JavaScript phía máy khách.
Các ứng dụng không có dịch vụ web nên sử dụng quy trình Cấp quyền ngầm.
Phần kết luận
Quyết định cuối cùng phải phụ thuộc vào trải nghiệm người dùng mong muốn của bạn nhưng cũng là sự thèm muốn rủi ro của bạn sau khi thực hiện đánh giá rủi ro thích hợp về các phương pháp tiếp cận trong danh sách rút gọn của bạn và hiểu rõ hơn các tác động.
Một bài đọc tuyệt vời ở đây https://auth0.com/blog/oauth-2-best-practices-for-native-apps/
Một địa chỉ khác là https://www.oauth.com/oauth2-servers/oauth-native-apps/ cho biết
Phương pháp hay nhất trong ngành hiện tại là sử dụng Quy trình cấp phép trong khi bỏ qua bí mật của ứng dụng khách và sử dụng tác nhân người dùng bên ngoài để hoàn thành quy trình. Tác nhân người dùng bên ngoài thường là trình duyệt gốc của thiết bị, (với miền bảo mật riêng biệt với ứng dụng gốc,) để ứng dụng không thể truy cập vào kho lưu trữ cookie hoặc kiểm tra hoặc sửa đổi nội dung trang bên trong trình duyệt.
Cân nhắc PKCE
Bạn cũng nên xem xét PKCE được mô tả ở đây https://www.oauth.com/oauth2-servers/pkce/
Cụ thể, nếu bạn cũng đang triển khai Máy chủ ủy quyền thì https://www.oauth.com/oauth2-servers/oauth-native-apps/checklist-server-support-native-apps/ tuyên bố rằng bạn nên
- Cho phép khách hàng đăng ký lược đồ URL tùy chỉnh cho các URL chuyển hướng của họ.
- Hỗ trợ các URL chuyển hướng IP lặp lại với số cổng tùy ý để hỗ trợ các ứng dụng dành cho máy tính để bàn.
- Đừng cho rằng các ứng dụng gốc có thể giữ bí mật. Yêu cầu tất cả các ứng dụng khai báo chúng là công khai hay bí mật và chỉ cấp bí mật của ứng dụng cho các ứng dụng bí mật.
- Hỗ trợ tiện ích mở rộng PKCE và yêu cầu khách hàng công khai sử dụng nó.
- Cố gắng phát hiện khi nào giao diện ủy quyền được nhúng trong chế độ xem web của ứng dụng gốc, thay vì khởi chạy trong trình duyệt hệ thống và từ chối những yêu cầu đó.
Xem xét lượt xem web
Có rất nhiều ví dụ về việc sử dụng Chế độ xem web tức là tác nhân người dùng được nhúng nhưng nên tránh cách tiếp cận này (đặc biệt khi ứng dụng không phải là bên thứ nhất) và trong một số trường hợp có thể dẫn đến việc bạn bị cấm sử dụng API dưới dạng đoạn trích bên dưới từ đây minh họa
Bất kỳ nỗ lực nào để nhúng trang xác thực OAuth 2.0 sẽ dẫn đến ứng dụng của bạn bị cấm khỏi API Fitbit.
Để xem xét bảo mật, trang ủy quyền OAuth 2.0 phải được hiển thị trong chế độ xem trình duyệt chuyên dụng. Người dùng Fitbit chỉ có thể xác nhận họ đang xác thực với trang Fitbit.com chính hãng nếu họ có các công cụ do trình duyệt cung cấp, chẳng hạn như thanh URL và thông tin chứng chỉ Bảo mật lớp truyền tải (TLS).
Đối với các ứng dụng gốc, điều này có nghĩa là trang ủy quyền phải mở trong trình duyệt mặc định. Các ứng dụng gốc có thể sử dụng lược đồ URL tùy chỉnh làm URI chuyển hướng để chuyển hướng người dùng trở lại từ trình duyệt đến ứng dụng yêu cầu quyền.
Các ứng dụng iOS có thể sử dụng lớp SFSafariViewController thay vì chuyển ứng dụng sang Safari. Việc sử dụng lớp WKWebView hoặc UIWebView bị cấm.
Các ứng dụng Android có thể sử dụng Tab tùy chỉnh của Chrome thay vì ứng dụng chuyển sang trình duyệt mặc định. Sử dụng WebView bị cấm.
Để làm rõ thêm, đây là trích dẫn từ phần này của bản nháp trước đó của liên kết phương pháp hay nhất được cung cấp ở trên
Tác nhân người dùng được nhúng, thường được triển khai với chế độ xem web, là một phương pháp thay thế để cấp phép cho các ứng dụng gốc. Tuy nhiên, chúng không an toàn cho các bên thứ ba sử dụng theo định nghĩa. Chúng liên quan đến việc người dùng đăng nhập bằng thông tin đăng nhập đầy đủ của họ, chỉ để họ giảm bớt thông tin đăng nhập OAuth kém mạnh mẽ hơn.
Ngay cả khi được sử dụng bởi các ứng dụng của bên thứ nhất đáng tin cậy, các tác nhân người dùng được nhúng vẫn vi phạm nguyên tắc ít đặc quyền nhất bằng cách có được thông tin xác thực mạnh hơn mức họ cần, có khả năng làm tăng nguy cơ tấn công.
Trong các triển khai dựa trên chế độ xem web điển hình của tác nhân người dùng được nhúng, ứng dụng chủ có thể: ghi lại mọi lần gõ phím được nhập vào biểu mẫu để nắm bắt tên người dùng và mật khẩu; tự động gửi biểu mẫu và bỏ qua sự đồng ý của người dùng; sao chép cookie phiên và sử dụng chúng để thực hiện các hành động được xác thực với tư cách là người dùng.
Khuyến khích người dùng nhập thông tin đăng nhập trong chế độ xem web được nhúng mà không có thanh địa chỉ thông thường và các tính năng nhận dạng khác mà trình duyệt có khiến người dùng không thể biết liệu họ có đang đăng nhập vào trang web hợp pháp hay không và ngay cả khi họ đang đăng nhập, nó sẽ đào tạo họ rằng bạn có thể nhập thông tin đăng nhập mà không cần xác thực trang web trước.
Ngoài các lo ngại về bảo mật, chế độ xem web không chia sẻ trạng thái xác thực với các ứng dụng khác hoặc trình duyệt hệ thống, yêu cầu người dùng đăng nhập cho mọi yêu cầu cấp quyền và dẫn đến trải nghiệm người dùng kém.
Do những điều trên, việc sử dụng tác nhân người dùng được nhúng KHÔNG ĐƯỢC KHUYẾN NGHỊ, ngoại trừ trường hợp ứng dụng của bên thứ nhất đáng tin cậy hoạt động như tác nhân người dùng bên ngoài cho các ứng dụng khác hoặc cung cấp đăng nhập một lần cho nhiều ứng dụng của bên thứ nhất.
Máy chủ ủy quyền NÊN xem xét thực hiện các bước để phát hiện và chặn thông tin đăng nhập thông qua tác nhân người dùng được nhúng không phải của chính chúng, nếu có thể.
Một số điểm thú vị cũng được nêu ra ở đây: /security/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the- a