2012-03-01 37 views
7

Tôi muốn một trang web (Rails 3.1 với Devise và Omniauth) và một ứng dụng di động (iOS5) để chia sẻ xác thực. Điều này có nghĩa là tôi muốn người dùng có thể gửi SSI cho trang web bằng Facebook hoặc SSI tới ứng dụng di động và ứng dụng di động nói chuyện với API của trang web bằng thông tin xác thực của người dùng để xác thực với trang web.Chia sẻ truy cập Facebook Mã thông báo giữa trang web và ứng dụng di động

Tôi hiện đang có mặt web hoạt động độc đáo với Người dùng có thể SSI vào tài khoản. Tôi cũng có ứng dụng di động đang hoạt động, hỗ trợ SSI cho người dùng. Cả hai đều đang sử dụng cùng một ứng dụng Facebook.

Sự cố của tôi là tìm thấy thứ gì đó được chia sẻ giữa hai thứ mà tôi có thể sử dụng cho ứng dụng dành cho thiết bị di động để xác thực đối với trang web. Rõ ràng cả hai đều có quyền truy cập vào cùng một ID người dùng nhưng điều này dường như không an toàn lắm. Ứng dụng di động của tôi có Mã thông báo truy cập, nhưng điều này khác với mã thông báo truy cập của trang web, mặc dù chúng trông giống nhau và mã thông báo truy cập di động của tôi hết hạn trong khi mã thông báo truy cập web của tôi không có.

Web/Rails Mã (Không thực):

DDDAKnu1dg40BDHEWN0VDssxs8GGF8ZBEEOb38HnS0IUEQC1NSufmPCcGeFkTuw39ZDl7OhlZBD2jwJEqXdAZCtZBflJRQKZB4ZA

thoại di động/iOS Mã (Không thực)

BDDAKnu1dg40BDEo3YjZD2hIwjfZB4slXJj3fmHfzLh5q1xZD0ShfJCb6PMjnApkpM0FTuGGvWnzZBQy4GZCMuysEEqhMz8YgruD53TXKTZC0GPFkfVe0b6fe8wieLLOZDDZA

Sử dụng Facebook access token debugger tôi nhận được như sau (Tất cả những gì bị loại bỏ là giống hệt nhau giữa thẻ):

Đối với Web/Rails Mã:

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName 
User ID:  
XXXXXXXX : My Name 
Issued: 
1327507734 : 8:08 am Jan 25 2012 
Expires:  
Never 
Valid: True 
Origin: Web 
Scopes: email offline_access 

Đối thoại di động/iOS:

App ID: 
XXXXXXXXXXXXXXXX : SomeAppName 
Metadata: {"sso":"iphone-safari"} 
User ID:  
XXXXXXXX : My Name 
Issued: 
1327507734 : 8:08 am Jan 25 2012 
Expires:  
Never 
Valid: True 
Origin: Native Mobile 
Scopes: email offline_access 
+0

Xin chào. bạn có tìm thấy giải pháp cho vấn đề này không? Tôi đang đối mặt với cùng một vấn đề ngay bây giờ ... – alex

+1

Xin chào. Không may là không. Lạ lùng cho rằng nó có vẻ là một yêu cầu khá phổ biến. Đã dành một thời gian dài tìm kiếm nhưng thấy không có gì hữu ích. Chuyển sang cái gì khác nhưng sẽ phải giải quyết điều này khá sớm. – Undistraction

+0

Ứng dụng của tôi không có yêu cầu bảo mật nghiêm ngặt, nhưng, những gì chúng tôi làm chỉ đơn giản là kiểm tra với Facebook để tìm id người dùng được liên kết với mỗi mã thông báo truy cập để khớp tài khoản – JeffS

Trả lời

1

Bạn phải thực hiện thay đổi nhỏ trong API facebook, trong ủy quyền, thay đổi từ

[self authorizeWithFBAppAuth:YES safariAuth:YES]; 

Để

[self authorizeWithFBAppAuth:NO safariAuth:NO]; 

Vì somethimes có vấn đề với thẻ khi bạn muốn auth bởi fbApp hoặc Safari. Tôi đã có cùng một vấn đề này, mã thông báo trong các dịch vụ web của tôi khác nhau vì điều này.

4

Chỉ để lưu nội dung, cách tôi đã xử lý việc này là chuyển mã thông báo di động đến máy chủ và yêu cầu máy chủ kiểm tra tính xác thực của mã thông báo. Một khi điều này được xác nhận tôi có thể kiểm tra xác thực đối với hồ sơ của tôi bằng cách sử dụng uid và email.

+0

Tôi có cùng một câu hỏi ngay bây giờ. Tôi không hiểu câu trả lời của bạn - nếu mã thông báo không giống với thông tin đăng nhập từ ứng dụng và web - làm thế nào để bạn xác thực nó? giả sử một người đã đăng nhập từ ứng dụng - bạn sử dụng nó như thế nào trong các cuộc gọi web? – Dejell

0

Một phương pháp có thể để giải quyết điều này là xác thực qua facebook trên thiết bị di động sau đó gửi f_uid đã mã hóa sang ứng dụng đường ray, sau đó giải mã f_uid và xem ai thực sự đăng nhập vào máy chủ.

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