2010-04-21 11 views
16

Tôi đang cố gắng thực hiện đăng nhập OpenId cho một ứng dụng web. Bất cứ khi nào người dùng mới đăng nhập qua OpenId tôi tạo một người dùng mới trên trang web, và trong số các dữ liệu tôi lưu trữ URL mở của họ, để lần sau họ đăng nhập với người dùng đó.Tại sao ID của việc triển khai OpenID của Google thay đổi?

Tôi đang thử nghiệm này với Gmail OpenID của tôi, và vấn đề là mỗi lần tôi làm điều này, Google sẽ gửi một URL OpenID khác nhau, có nghĩa là, https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

Đương nhiên tôi thì không thể nói wheter đây là người dùng mới hay không. Tôi hơi bối rối: không phải mã định danh mở luôn luôn giống nhau không?

+4

Cố gắng sử dụng nhiều dấu chấm hỏi và dấu chấm than!?!? – fig

+2

Tôi thường không làm điều đó, nhưng tôi đã thực sự hoang mang trước hành vi này. Tôi hy vọng lợi thế của OpenId là có một URL duy nhất để xác định chính mình, thay vì dựa vào một nhà cung cấp chỉ định một cho bạn mỗi lần. – Andrea

+0

thậm chí tôi có cùng một vấn đề, nhưng về đào sâu hơn tôi phát hiện ra rằng tên miền trong trường hợp của tôi được gửi cho yêu cầu xác thực là cùng một chuỗi, vẫn cung cấp các giá trị khác nhau trong các trình duyệt khác nhau. Tôi đã thử nghiệm nó trong FF và chrome. không chắc chắn những gì tôi đang thiếu ở đây. – awake416

Trả lời

19

Mã nhận dạng OpenID của Google ít nhiều đại diện cho nhiều dữ liệu bao gồm cả máy chủ mà yêu cầu đến (chính xác hơn là thông số openid.realm được gửi tới nhà cung cấp). Vì vậy, nếu máy chủ của bạn thay đổi theo thời gian (như cổng và địa chỉ ip thay đổi), sau đó ID sẽ thay đổi theo thời gian quá. StackOverflow cũng sử dụng giải pháp cho vấn đề này. Kiểm tra các bài viết:

Dưới đây là một câu hỏi thường gặp đoạn trích từ google:

Q: Các OpenID spec nói rằng openid.realm là không bắt buộc, và rằng nếu không được cung cấp, Google nên sử dụng URL openid.return_to thay thế. Công việc vừa ý?

A: Nó sẽ hoạt động theo nghĩa là giao thức sẽ hoàn tất thành công. Nhưng nếu URL return_to của bạn giống như www.example.com/authenticate?style=openid-federated_login, bạn đang yêu cầu chúng tôi nhắc người dùng chấp thuận và tin tưởng một địa chỉ cụ thể tại trang web của bạn, địa chỉ này không thân thiện với người dùng. Ngoài ra, nếu bạn bỏ qua thông số openid.realm, bạn sẽ không bao giờ có thể thay đổi URL return_to của mình: Nó cũng sẽ thay đổi hoàn toàn lĩnh vực và số nhận dạng URL của người dùng Tài khoản Google của bạn.

+0

Tôi chỉ đang thực hiện hai xác thực từ cùng một máy chủ lưu trữ (cục bộ), cách nhau một vài giây. Vì vậy, tôi đoán không có gì thay đổi; nhưng tôi có được danh tính khác nhau (openid.identity). – Andrea

+0

ghi nhật ký giao tiếp giữa ứng dụng của bạn và google. Các khung oid chính hỗ trợ điều này. Kiểm tra xem yêu cầu có giống nhau cho cả truy vấn của bạn hay không. – SztupY

+0

SztupY: "bao gồm cả máy chủ yêu cầu đến từ" là không đúng sự thật. Biến ở đây là tham số openid.realm, không liên quan đến yêu cầu đến từ đâu nhưng thay vào đó phản hồi sẽ được gửi tới (có thể là một điều rất khác, nhưng thường là điều tương tự). –