Tôi có ứng dụng web trang đơn Angular + Spring. Máy chủ cũng hoạt động như một Máy chủ xác thực phát hành mã thông báo cho ứng dụng góc để sử dụng để thực hiện cuộc gọi API Restful.cách tích hợp thông tin đăng nhập tên người dùng/mật khẩu thông thường với đăng nhập xã hội của bên thứ ba cho một ứng dụng web đơn khởi động Spring + Angular?
Luồng đăng nhập cũ của tôi sử dụng lệnh gọi grant_type = password POST tới điểm cuối/oauth/token để nhận mã thông báo Bearer. Và tất cả các cuộc gọi API khác thay mặt cho người dùng sẽ bao gồm mã thông báo Bearer làm tiêu đề http "Ủy quyền".
Bây giờ tôi cần tích hợp đăng nhập xã hội (facebook, twitter, v.v.), có nghĩa là tôi không có tên người dùng/mật khẩu để tạo mã thông báo nên tôi không chắc chắn cách làm cho nó hoạt động.
Tôi đã sử dụng hai bài hướng dẫn sau đây là mẫu của tôi:
Spring Security and Angular JS
Trong ví dụ oauth-vani hướng dẫn đầu tiên, tên người dùng Passwork luồng đăng nhập sẽ xuất hiện trang uỷ quyền. Nhưng tôi muốn có trải nghiệm đăng nhập biểu mẫu tên người dùng/mật khẩu truyền thống (đăng nhập người dùng trực tiếp thay vì hiển thị trang ủy quyền). Trong hướng dẫn thứ hai, sau khi đăng nhập facebook, tôi muốn sử dụng id facebook để tra cứu cơ sở dữ liệu người dùng nội bộ của mình và tạo người dùng mới nếu không tồn tại và ghi lại người dùng đó với tư cách người dùng. Và sử dụng danh tính và quyền hạn của người dùng db nội bộ để cho phép các cuộc gọi API trong tương lai tới máy chủ API của tôi.
Tôi có một mẫu rút gọn ở tại https://github.com/dingquan/spring-angular-oauth
tôi có thể làm POST cuộc gọi đến/oauth/thẻ endpoint và sử dụng các dấu hiệu quay trở lại thực hiện cuộc gọi api hơn nữa để bảo vệ/api/blog endpoint của tôi. Nhưng tôi đã không tìm ra cách để làm những điều sau đây làm việc:
Tên đăng nhập/mật khẩu đăng nhập mà sẽ tạo ra một cookie phiên vì vậy tôi không cần phải gửi mã thông báo ủy quyền mang cho các cuộc gọi API trong tương lai cho điểm cuối tài nguyên
Sau khi đăng nhập facebook (liên kết đăng nhập facebook dưới dạng đăng nhập tên người dùng/mật khẩu), cuộc gọi đến điểm cuối của tôi vẫn không thành công với lỗi 401 (Tôi có nút "kiểm tra" để gọi điện/api)/blog, bạn có thể nhấp vào nó để xem hành vi). Vì vậy, những gì tôi thiếu để thực hiện cuộc gọi API thành công?
=== CẬP NHẬT ===
Chỉ cần làm rõ. Dưới đây là những mục tiêu tôi đang cố gắng để đạt được:
- nhiều cách xác thực (truyền thống username/password, bên thứ ba oauth đăng nhập như facebook, có thể là số điện thoại di động + mã SMS trong tương lai)
- chúng tôi làm cần mô hình người dùng của riêng chúng tôi được DB hỗ trợ để lưu trữ các thuộc tính người dùng khác, thông tin đăng nhập xã hội thuần túy là không đủ
- thông tin đăng nhập xã hội cần được ẩn. Có nghĩa là người dùng không cần phải tạo tài khoản người dùng trong hệ thống của chúng tôi theo cách thủ công khi họ đăng nhập thông qua bên thứ 3 (facebook, v.v.). Chúng tôi không chỉ lấy dữ liệu hồ sơ xã hội của người dùng để điền trước biểu mẫu đăng ký.Chúng tôi muốn tự động tạo người dùng DB mới sau cảnh nếu không có người dùng db hiện tại nào được liên kết với tài khoản xã hội bên ngoài đã cho. tức là nếu người dùng đăng nhập qua facebook, họ không cần phải nhập tên người dùng/mật khẩu. Xác thực thông qua facebook sẽ tự động đăng nhập người dùng vào hệ thống của chúng tôi là tốt và người dùng sẽ có thể truy cập tài nguyên bị hạn chế sau khi đăng nhập facebook.
Có một số nhầm lẫn rằng tôi có thể yêu cầu mọi người đặt tên người dùng/mật khẩu facebook của họ vào biểu mẫu đăng nhập do ứng dụng của tôi lưu trữ và tôi sẽ đăng nhập facebook thay mặt người dùng. Đó không phải là những gì tôi đã yêu cầu.
Xem các dự án http://projects.spring.io/spring-social. Chúng cho phép bạn dễ dàng tích hợp Facebook, twitter và các thông tin đăng nhập xã hội khác. – James