8

Chúng tôi đang phát triển một ứng dụng javascript cơ sở khách hàng đầy đủ SPA và cần phải xác thực người dùng của chúng tôi để có quyền truy cập vào nội bộ.Đăng nhập vào Ứng dụng một trang với xác thực của Google và Google Oauth 2.0

Khi tôi tìm thấy từ tìm kiếm, chúng tôi có thể thuê ngoài cơ chế xác thực của mình và sử dụng tài khoản Google cho điều đó. Tôi đã học được từ trang web này https://developers.google.com/accounts/docs/OAuth2Login - Cách xử lý API Google và cơ chế xác thực.

Trong lời ngắn, chúng ta cần:

  • gửi yêu cầu đến google url với params hỏi người sử dụng để cho phép SPA sử dụng dữ liệu cá nhân của họ
  • trong trường hợp thành công, chúng tôi nhận mã từ Google
  • chúng tôi có thể sử dụng mã thông báo này để có quyền truy cập vào API mà chúng tôi đã được hỏi và làm việc với nó.

Điều này được mô tả tốt và tôi hiểu nó và có một số mã JS để làm cho nó xảy ra.

Điều tôi không hiểu.

Tôi có một ứng dụng có dữ liệu riêng tư. Tôi muốn sử dụng e-mail của người dùng làm thông tin đăng nhập hoặc id người dùng (không quan trọng cách gọi nó) để truy cập nội bộ của ứng dụng, chẳng hạn như tác vụ do người dùng tạo, tiểu sử của người dùng, v.v. Tôi cần cơ sở dữ liệu truy vấn bằng e-mail của người dùng.

Tôi giả sử tình huống tiếp theo:

  • người dùng nhấp Login with Google nút
  • chúng tôi có được một thẻ - điều này có nghĩa là người dùng đã được xác thực thành công
  • chúng tôi kiên trì dùng và e-mail của mình để làm việc với SPA
  • khi người dùng nhấp vào Logout chúng tôi xóa tất cả dữ liệu truy cập

Tôi nên lưu dữ liệu này ở đâu?

Trong trường hợp Forms Authentication tôi hiểu rằng chúng tôi vượt qua đăng nhập/mật khẩu để máy chủ và nếu chúng phù hợp với cơ sở dữ liệu chúng tôi tạo Forms Ticketlưu trữ nó trong cookie.

Có trường hợp tương tự nào với auth của Google không? Nếu tôi lưu trữ email của người dùng trong cookie, tôi nghĩ rằng đó không phải là rất tốt vì lý do bảo mật. Nếu tôi sẽ lưu một mã thông báo - Tôi không chắc tại sao tôi cần nó và cách sử dụng nó trong SPA của tôi, tôi không sử dụng bất kỳ API Google nào sau khi xác thực.

Bạn có trường hợp ví dụ nào về cách chúng tôi tạo quy trình của mình trong các trường hợp tương tự không?

Cảm ơn bạn.

+0

FYI ID người dùng và email người dùng khác nhau theo một cách quan trọng; người dùng có thể thay đổi địa chỉ email của họ và ID sẽ vẫn giữ nguyên cho người dùng đó. –

+0

Trong trường hợp cụ thể này, chúng tôi sẽ không thay đổi email bên trong mạng công ty. Nói chung tôi đã cố gắng giải thích, rằng tôi sẽ sử dụng đầu tiên hoặc thứ hai, nhưng nó không quan trọng về những gì tôi nên làm gì tiếp theo. Nếu ID - ok, hãy lưu ID của người dùng trong cơ sở dữ liệu và truy vấn nó bằng id, nếu e-mail - cũng ok. BTW làm thế nào tôi có thể thay đổi e-mail trên google? Thậm chí có thể không? –

+1

http://support.google.com/accounts/bin/answer.py?hl=vi&answer=19870 –

Trả lời

5

Nếu tất cả những gì bạn cần là địa chỉ email của người dùng, thì bạn nên sử dụng OpenID thay vì OAuth. OAuth cung cấp quyền truy cập vào tài khoản và dịch vụ của người dùng, được chuyển đến một tài nguyên hoặc tập hợp tài nguyên cụ thể. OpendID được thiết kế chỉ để đăng nhập vào dịch vụ của bên thứ ba. Sau đó, bạn có thể trích xuất ID và địa chỉ email của người dùng từ thông tin đăng nhập OpenID. Lưu ý: ID sẽ luôn được gửi nhưng địa chỉ email phải được yêu cầu rõ ràng trong quá trình xác thực.

Google cũng hỗ trợ lược đồ OpenID + OAuth lai cho phép bạn yêu cầu OAuth piggyback trên đầu trang đăng nhập OpenID nếu có một số tài nguyên bạn cần xác thực. Take a look at the authentication document to get an idea of how both protocols work and which is better for your scenario.

Khi bạn đã trả lại địa chỉ email, có thể bạn không nên duy trì nó trong cookie. Cách thông thường được đề nghị để xử lý nó là thêm nó làm tham số phiên. Bằng cách đó, chỉ cookie phiên được lưu trữ trên máy khách và máy chủ có thể sử dụng nó để tìm các giá trị cần thiết. This answer has a good explanation of the differences and when you want to use sessions versus cookies.

Các vấn đề liên quan