Google APIs sử dụng giao thứcOAuth 2.0cho việc chứng thực và xác thực. Google hỗ trợ nhiều cách OAuth 2.0 cho nhiều ngữ cảnh khác nhau như: javascript, ứng dụng cài đặt, ứng dụng trên thiết bị, giao tiếp từ server đến server.
OAuth 2.0 là một giao thức đơn giản giúp nhà phát triển tích hợp vào ứng dụng một cách dễ dàng. Đầu tiên, chúng ta đăng ký ứng dụng với google, chuyển hương trình duyệt đến một URL, phân tích response nhận mã thông báo và gửi mã đó đến Google API mà chúng ta muốn truy cập.
Trong phần này sẽ giới thiệu tổng quan về OAuth 2.0 và các link để chúng ta tham khảo chi tiết hơn, đến chương tiếp theo sẽ mô tả một ví dụ sử dụng OAuth 2.0 bằng ngôn ngữ java được sử dụng trong dự án.
Các bước cơ bản:
Những ứng dụng khi muốn truy cập đến Google API sử dụng giao thức OAuth 2.0 đều hoạt động theo mô hình 4 bước căn bản sau:
1. Đăng ký ứng dụng
Tất cả ứng dụng truy cập đến Google API đều phải được đăng ký thông qua APIs console. Kết quả của quá trình đăng ký là tập hợp những giá trị cần thiết cho việc truy cập và nó phụ thuộc vào kiểu ứng dụng mà chúng ta đăng ký. Ví dụ một
ứng dụng javascript thì không cần một mã bí mật còn ứng dụng web phía server thì cần.
2. Lấy mã truy cập từ Google Authorization Server
Trước khi ứng dụng của chúng ta có thể truy cập đến Google API, chúng ta cần một mã truy cập được gán quyền truy cập đến API đó.Một mã truy cập có thể được gán quyền đến nhiều API. Có một tham số được gọi là “scope” sẽ xác định nguồn tài nguyên và phương thức mà chúng ta được thực thi trong suốt quá trình yêu cầu truy cập được cấp phép bởi mã truy cập trên. Trong một request chúng ta có thể bao gồm nhiều “scope”.
Có nhiều hướng để tạo request này, và chúng khác nhau là tùy thuộc vào ứng dụng mà chúng ta đang xây dựng. Ví dụ, một ứng dụng JavaScript có thể request một mã truy cập bằng cách sử dụng một trình duyệt chuyển hướng đến Google lần nữa, trong khi một ứng dụng cài đặt trên thiết bị không có trình duyệt sử dụng một request của dịch dụ web.
Request yêu cầu người dùng đăng nhập tới Google. Sau khi đăng nhập thành công người dùng sẽ thấy các điều khoản theo yêu cầu của ứng dụng và được yêu cầu và được yêu cầu nếu họ sẵn sàng cấp những quyền truy cập ứng dụng của chúng ta. Tiến trình này gọi là “user consent”.
Nếu người dùng cấp quyền truy cập tới ứng dụng của chúng ta, ứng dụng của chúng ta sẽ gửi một mã truy cập hoặc một mã ủy quyền (được sử dụng để có được một mã truy cập). Nếu người dùng không cấp quyền cho ứng dụng của chúng ta, Google Authorization sẽ trả về một lỗi.
3. Gửi một mã truy cập tới một API
Sau khi ứng dụng có được mã truy cập, nó có thể gửi mã truy cập trong một request tới một Google API. Mã truy cập chỉ có giá trị trong thiết lập của quá trình hiện tại và những tài nguyên được mô tả trong mã request. Ví dụ nếu một mã truy cập được cấp cho API Google+, nó sẽ không cấp quyền truy cập tới Google Contacts API. Tuy nhiên, nó có thể gửi tới Google+ API nhiều lần cho các hoạt động tương tự. Thẻ truy cập được gửi đến một Google API trong phần header của HTTP Authorization, hoặc như một tham số chuỗi truy vấn (nếu header của HTTP không có sẵn).
4. Làm mới mã truy cập (tùy chọn)
Mã truy cập đều có một giới hạn thời gian, trong một số trường hợp ứng dụng cần truy cập tới một Google API vượt quá thời gian giới hạn thời gian tồn tại
của một mã truy cập. Trong trường hợp này ứng dụng của chúng ta có thể làm được bằng refresh token. Một refresh token cho phép ứng dụng của chúng ta có thể làm mới các mã truy cập.
Sau đây là các ngữ cảnh mà chúng ta có thể sử dụng. Đăng nhập
Cho phép người dùng đăng nhập rõ ràng là một phần thiết yếu khi truy cập hầu hết các API của Google, nhưng hệ thống xác thực của Google có thể được sử dụng bởi ứng dụng của chúng ta như một phần độc lập. Nói cách khác chúng ta có thể không cần phải thiết kế phần đăng nhập cho ứng dụng của chúng ta mà chúng ta có thể dùng dịch vụ của Google để xác nhận tài khoản người dùng, từ đó tích hợp vào ứng dụng chúng ta.
Quá trình đăng nhập bắt đầu bằng cách chuyển hướng trình duyệt (mở popup hoặc mở trang đầy đủ nếu cần thiết), với một tập hợp các tham số của chuỗi truy vấn. Google sẽ xử lý chuyến hướng nếu chúng ta đã đăng nhập lần giống nhau, chấp nhận và xác nhận thông tin người dùng và xác nhận mật khẩu lần nữa nếu tài khoản yêu cầu, được tiết lộ thông tin cá nhân cơ bản, cũng như tạo ra và trả về một mã truy cập OAuth tới ứng dụng của chúng ta.
Kết quả của chuỗi xác thực người dùng là một mã truy cập OAuth 2.0, và sau đó chúng ta có được thông tin người dùng (tên, địa chỉ email, địa chỉ email xác nhận, hồ sơ hình ảnh) bằng cách gọi một API Google UserInfo.
Thông tin trả về từ UserInfo có thể được sử dụng trong suốt quá trình đăng ký và có thể cải thiện tỷ lệ thành công việc đăng ký. Ngoài ra khi tài khoản và mật khẩu người dùng được lưu trên server google chúng ta sẽ không cần phải lo về vấn đề bảo mật tài khoản người dùng.
Để biết thêm thông tin, chúng ta có thể tham khảo Login documentation
Ứng dụng web phía server
Google OAuth 2.0 Authorization Server hỗ trợ nhiều cho ứng dụng web phía server (ví dụ như Android, Window, Mac OS, iOS, Blackberry,…). Trình tự này bắt đầu bằng cách chuyển hướng trình duyệt (mở popup hay mở trang web đầy đủ nếu cần thiết) tới một URL của Google với một tập hợp các tham số cho biết loại của Google API truy cập mà ứng dụng yêu cầu. Giống như các kịch bản khác, Google xử lý xác thực người dùng, lựa chọn phiên sử dụng, cho phép sử dụng, nhưng kết quả của tiến trình là một mã số xác thực. Sau khi nhận được mã số xác thực, ứng dụng có thể trao đổi một mã truy cập và một refresh token.
Các ứng dụng có thể truy cập vào một API của Google sau khi nhận được mã truy cập.
Để biết thêm thông tin chúng ta có thể tham khảo tại Web Server documentation.
Các ứng dụng phía Client
Google OAuth 2.0 Authorization Server hỗ trợ các ứng dụng JavaScript (JavaScript chạy trên trình duyệt). Giống như các kịch bản khác, bắt đầu là việc chuyển hướng trình duyệt (mở popup hoặc mở đầy đủ trang nếu cần thiết) đến một URL của Google với tập hợp các tham số của chuỗi truy vấn cho biết loại của API của Google truy cập mà ứng dụng yêu cầu. Google xác thực phiên truy cập, xác nhận phiên truy cập, và cho phép truy cập. Sau khi có mã truy cập, client nên xác nhận mã truy cập. Sau khi xác nhận, client sẽ có được mã truy cập vào một API của Google.
Để biết thêm thông tin chúng ta có thể tham khảo tại Client-side documentation.
Cài đặt ứng dụng
Google OAuth 2.0 Authorization Server hỗ trợ các ứng dụng desktop và ứng dụng mobile (ví dụ như Android, Mac OS, iOS, Blackberry,…). Nói chung là những ứng dụng không có tính bảo mật cao.
Trình tự cho các ứng dụng cài đặt tương tự như trong phần dịch dụ web phía Server, nhưng có ba trường hợp ngoại lệ:
1. Khi đăng ký các ứng dụng, chúng ra xác định rằng ứng dụng là một ứng dụng cài đặt. Điều này dẫn đến giá trị khác nhau cho tham số redirect_uri.
2. Client_id và client_secret thu được trong suốt quá trình đăng ký được nhúng vào trong mã nguồn của ứng dụng của chúng ta. Trong bối cảnh này, client_secret rõ ràng được xử lý không bảo mật.
3. Mã xác thực được trả về cho ứng dụng của chúng ta theo một cách khác biệt.
Trình tự này bắt đầu bằng cách chuyển hướng trình duyệt (một trình duyệt được nhúng vào trong ứng dụng hoặc trình duyệt hệ thống) tới một URL của Google cùng với tập hợp các tham số truy vấn cho thấy loại của API của Google truy cập mà ứng dụng yêu cầu. Giống như các kịch bản khác, Google xử lý xác thực người dùng, lựa chọn phiên sử dụng, cho phép người dùng truy cập. Kết quả của tiến trình là một mã truy cập. Ứng dụng của chúng ta có thể chọn để có mã xác thực trả về trong tiêu đề của trang web hoặc một cổng http://localhost. Một ứng dụng nhận được mã xác thực, nó có thể trao đổi mã cho một mã truy cập và một refresh token.
Sau khi ứng dụng nhận được mã truy cập và refresh token, nó có thể lưu trữ mã refresh token để sử dụng trong tương lai, và sử dụng mã truy cập để truy cập tới API của Google. Một khi mã truy cập hết hạn, ứng dụng được làm mới với refresh token.
Để biết thêm thông tin chúng ta có thể tham khảo tại Installed Application documentation.
Các thiết bị
Google OAuth 2.0 Authorization Server hỗ trợ các ứng chạy trên các thiết bị với khả năng đầu vào bị hạn chế (ví dụ như máy điều khiển trò chơi, máy quay video, máy in). Trong trường hợp này người dùng phải có quyền truy cập tới một máy tính hoặc thiết bị với khả năng đầu vào phong phú hơn. Người dùng sẽ tương tác lần đầu tiên với các ứng dụng có đầu vào hạn chế để có được một URL và một mã được hiển thị cho người dùng, sau đó chuyển sang một thiết bị hoặc một máy tính với đầu vào phong phú hơn và khởi đông một trình duyệt. Khi trong trình duyệt, người dùng sẽ điều hướng đến URL được chỉ định trên thiết bị, xác thực và nhập mã số. Trong phản hồi chứa vài đối số, bao gồm URL và mã nên được hiển thị tới người dùng. Các ứng dụng sẽ trình bày các giá trị này cho người dùng, và bắt đầu duyệt cho một URL của Google tại một khoảng thời gian quy định. Phản hồi của một tin nhắn trong trình tự duyệt này cho thấy người sử dụng có được truy cập hay không. Sau khi người sử dụng được phép truy cập (thông qua máy tính hoặc thiết bị khác), phản hồi có chứa một mã truy cập và refresh token.
Sau khi ứng dụng nhận được mã truy cập và refresh token, nó có thể lưu trữ mã refresh token để sử dụng trong tương lai, và sử dụng mã truy cập để truy cập tới API của Google. Một khi mã truy cập hết hạn, ứng dụng được làm mới với refresh token.
Sau khi ứng dụng nhận được mã truy cập và refresh token, nó có thể lưu trữ mã refresh token để sử dụng trong tương lai, và sử dụng mã truy cập để truy cập tới API của Google. Một khi mã truy cập hết hạn, ứng dụng được làm mới với
Để biết thêm thông tin chúng ta có thể tham khảo tại Device documentation.
Dịch vụ tài khoản
Một số API của Google tác động đến một ứng dụng và không truy cập thông tin người dùng. Ví dụ những API bao gồm Prediction API và Google Cloud Storage. Khi một ứng dụng truy cập tới Google Cloud Storage ứng dụng cần chứng minh cái riêng của mình trước khi thực hiện lưu trữ như vậy không cần phải có sự phê duyệt của người dùng. Ngoài ra còn có sự lựa chọn cho các ứng dụng cần ủy quyền truy cập tới các tài nguyên trong các trường hợp doanh nghiệp. Google’s OAuth 2.0 Authorization Server hỗ trợ cho nhiều loại ứng dụng, trong phần này mô tả cách mà một ứng dụng có thể xác thực nó trước khi truy cập tương thích vào một API của Google.
Các cơ chế của tương tác này yêu cầu ứng dụng tạo ra và mã hóa các ký tự Token Web JSON (JWTs). Nhà phát triển khuyến khích mạnh mẽ việc sử dụng thư viện để thực hiện các công việc này. Viết các mã này không cần sử dụng một thư viện tóm tắt để tạo mã thông báo và ký kết là có thể tác động nghiêm trọng về
an ninh ứng dụng của chúng ta. Thư viện hỗ trợ này có thể tham khảo tài lệu
OAuth 2.0 Service Accounts.
Trình tự này bắt đầu với việc tạo ra một dịch vụ tài khoản. Chúng ta có thể tạo một dịch vụ tài khoản trong Google APIs Console, hoặc nếu chúng ta đang sử dụng Google App Engine, chúng sẽ được tạo tự động cho ứng dụng Google App Engine của chúng ta. Trong việc tạo ra tài khoản dịch vụ trong Google APIs Console chúng ta sẽ chúng ta sẽ nhắc nhở để tải về một khóa riêng ở một vị trí an toàn. Sau khi tài khoản của mình được tạo ra, chúng ta cũng sẽ có quyền truy cập vào ID của client kết hợp với khóa riêng. Chúng ta sẽ cần cả hai khi mã hóa ứng dụng của chúng ta.
Sau khi có ID client và khóa riêng từ Google APIs Console, tạo ra một JWT và ký tự với mã khóa riêng, và xây dụng một mã truy cập trong các định dang thích hợp. Ứng dụng của chúng ta sau đó gửi yêu cầu tới Google OAuth 2.0 Authorization Server và một mã truy cập sẽ được trả về. Các ứng dụng có thể truy cập vào các API chỉ sau khi nhận được mã truy cập. Khi mã truy cập hết hạn, ứng dụng lặp đi lặp lại quá trình.
Để biết thêm thông tin chúng ta có thể tham khảo tại Device documentation.
CHƯƠNG 3: NỘI DUNG NGHIÊN CỨU VÀ KẾT QUẢ
Chương trước đã chỉ ra các cơ sở lý thuyết mà trong quá trình nghiên cứu luận văn chúng tôi đã tham khảo. Trong chương này sẽ đề cập đến chi tiết hơn phần ứng dụng các cơ sở lý thuyết vào chương trình demo, và cũng nêu rõ kết quả của quá trình nghiên cứu này.