Openid là gì
openid là một giao thức xác thực phi tập trung và tiêu chuẩn mở.
Được phát triển bởi tổ chức phi lợi nhuận openid, openid cho phép người dùng xác thực với nhiều trang web sử dụng dịch vụ của bên thứ 3 (bên kiểm duyệt hoặc rp). Nó làm giảm nhu cầu thiết lập logic riêng biệt. Đăng ký/đăng nhập từng site, cho phép người dùng đăng nhập nhiều site không liên quan đến nhau mà không phải đặt mã định danh và mật khẩu riêng cho từng site.
Bạn có thể chọn liên kết thông tin với openid của mình – thông tin này sẽ được chia sẻ với các trang web bạn truy cập (chẳng hạn như tên hoặc email của bạn). Với openid, bạn có thể kiểm soát lượng thông tin mà bạn muốn các trang web bạn truy cập biết.
Với openid, chỉ nhà cung cấp danh tính quản lý mật khẩu và nhà cung cấp này sẽ xác nhận danh tính của bạn với các trang web bạn truy cập và không trang web nào có thể biết mật khẩu của bạn – đây là yếu tố bảo mật mật độ rất cao.
openid nhanh chóng được cộng đồng trực tuyến công nhận và chấp nhận, với hơn 1 tỷ tài khoản openid được tạo và 50.000 trang web đăng nhập bằng phương pháp openid. Một số tổ chức lớn cho phép hoặc phát hành openids hoặc tái sử dụng openids, chẳng hạn như google, facebook, yahoo!, microsoft, aol, myspace, sears, universal music group, france telecom, novell, sun, telecom italia, v.v.
Tại sao nên sử dụng openid
Đăng ký thành viên nhanh chóng và dễ dàng
Bên cạnh còn có hình hoạt hình, rất tiện lợi. Một nhân viên thu ngân hỏi anh khách hàng có muốn đăng ký làm thành viên chợ thực phẩm không? Khách hàng rất hào hứng trả lời “không, tôi sẽ sử dụng openid của mình”. openid là một cách để xác định chính bạn cho dù bạn truy cập trang web nào. Nó giống như một giấy phép lái xe cho toàn bộ internet. Nhưng quan trọng hơn, vì bạn có thể kiểm soát thông tin liên quan đến openid, chẳng hạn như tên, địa chỉ email của bạn và bạn có thể chọn trang web nào được phép xem? cái nào? Điều đó cũng có nghĩa là các trang web sử dụng openid sẽ không hỏi đi hỏi lại tên, địa chỉ email của bạn mỗi lần.
Đăng nhập nhanh chóng và dễ dàng
OpenID also simplifies signing in. OpenID còn rất dễ dàng để login. Với OpenID bạn chỉ cần nhớ 1 username và 1 password. Bởi vì bạn login vào website với OpenID của bạn, cho nên bạn chỉ cần bảo mật với OpenID là đủ rồi. Password này của bạn thực tế là chỉ được quản lý bởi OpenID provider của bạn, ko phải là các website bạn đang login, khi bạn login vào OpenID provider sẽ bảo với các website đó là bạn đang login đấy và bạn là ai. Ko có bất kì một website nào nhìn được password của bạn, cho nên bạn ko cần phải quá bận tâm về vấn đề bảo mật khi sử dụng OpenID.
Khám phá khái niệm “danh tính trực tuyến”
Bởi vì openid nhận dạng duy nhất bạn trên internet, sau khi bạn xác lập mình là người dùng openid, bất kỳ ai nhìn thấy openid của bạn được sử dụng ở bất kỳ đâu trên internet sẽ biết đó là bạn. Tương tự như vậy, nếu bạn truy cập một trang web mới và thấy ai đó có mã số mở của bạn mình, bạn gần như có thể chắc chắn đó là bạn của mình. Điều này có thể khiến bạn lo lắng rằng openid đang làm cho mọi hoạt động trực tuyến của bạn trở nên quá rõ ràng và dễ bị phát hiện. Đừng lo lắng, mặc dù openid hợp nhất thông tin của bạn nhưng nó chỉ hợp nhất thông tin bạn đã công khai. Bạn có thể chọn, sử dụng openid, thông tin gì? và ai nhìn thấy thông tin
Openid có an toàn không?
openid không thực sự an toàn hơn hay an toàn hơn những gì bạn đang sử dụng hiện nay. Trên thực tế, nếu ai đó lấy được tên người dùng và mật khẩu openid của bạn, họ có thể chiếm đoạt danh tính của bạn. Hầu hết các trang web cung cấp đặt lại mật khẩu qua email trong trường hợp bạn quên mật khẩu, điều đó có nghĩa là nếu ai đó nắm giữ tài khoản email của bạn, họ có thể làm điều tương tự như thể họ có tên người dùng và mật khẩu openid của bạn. Họ có thể kiểm tra các trang web mà họ cho rằng bạn có tài khoản và yêu cầu thay đổi mật khẩu đã quên. Tương tự như vậy, nếu ai đó có quyền truy cập vào openid của bạn, họ có thể tìm kiếm trên internet nơi họ cho rằng bạn có tài khoản và đăng nhập với tư cách là bạn…không có sự khác biệt về quyền riêng tư ở đây.
Vì vậy, cho dù bạn có sử dụng openid hay không, bạn nên cẩn thận với tài khoản của mình – tên người dùng và mật khẩu. Khi bạn nhập tên người dùng và mật khẩu của mình, hãy đảm bảo rằng bạn đang ở trên trang web mà bạn muốn truy cập
Tôi có nên chỉ định toàn bộ số nhận dạng cho một trang web không?
Tùy bạn, bạn cũng có thể có nhiều openid nếu muốn, mỗi openid có thông tin khác nhau về bạn. Trên thực tế, có nhiều trang web cho phép bạn liên kết nhiều openid với cùng một tài khoản. Nhưng làm như vậy sẽ đánh bại khái niệm đơn giản hóa “chỉ có 1 tên người dùng và mật khẩu”.
xác thực openid
xác thực openid là cốt lõi của openid, nó bao gồm 3 khái niệm chính:
-
openid ID: Một chuỗi xác định duy nhất một người dùng.
-
bên xếp hạng openid (rp): tài nguyên trực tuyến (có thể là các trang web nhưng cũng có thể là tệp, hình ảnh hoặc bất kỳ thứ gì bạn muốn kiểm soát quyền truy cập) sử dụng openid để xác định ai có thể truy cập tài nguyên đó .
-
nhà cung cấp openid (op): Trang web nơi người dùng có thể yêu cầu openid, sau đó đăng nhập và xác thực bằng rp.
openid hoạt động như thế nào?
Giả sử người dùng đang cố truy cập tài nguyên là một phần của trang web rp và rp sử dụng openid. Để truy cập tài nguyên, người dùng phải cung cấp openid của mình ở dạng có thể (thường) được nhận dạng là openid. Openid được mã hóa với vị trí của op. rp sau đó lấy mã định danh của người dùng và chuyển hướng người dùng đến op, nơi người dùng sẽ được yêu cầu chứng minh khiếu nại của mình với id đó.
Chúng ta hãy xem xét kỹ hơn về openid và từng vai trò của nó trong quy trình.
số nhận dạng openid
Trái tim của openid là định danh openid. Mã định danh openid (hoặc chỉ “mã định danh” là đủ) là một chuỗi ký tự duy nhất xác định duy nhất một người nào đó. Không có hai người có cùng openid. Theo phiên bản 2.0 của đặc tả xác thực openid, openid rp có thể giải mã mã định danh có thể nhận dạng để xác thực người dùng. Trong cơ chế của openid có 2 dấu hiệu nhận biết cần chú ý:
- Số nhận dạng do người dùng cung cấp
- Định danh khai báo
- Địa chỉ email
- Họ và tên
- Ngày sinh
- Mã Bưu Chính
- Quốc gia
- Ngôn ngữ chính
- Người dùng nhập openid trên trang đăng ký
- Ứng dụng sẽ xác minh định danh (hướng dẫn người dùng chọn đăng nhập)
- Sau khi xác thực thành công, ứng dụng truy xuất thông tin người dùng từ ops và hướng người dùng đến trang lưu nơi người dùng có thể xác nhận và lưu thông tin của họ. Thông tin hiển thị trên trang lưu được trích xuất từ thông tin do op cung cấp.
- Thông tin hiển thị trên trang lưu được lấy từ thông tin do op cung cấp.
- Tôi đã viết một ứng dụng sử dụng wicket. Nhưng tôi đã thu nhỏ nó để giúp bạn tập trung vào việc tìm hiểu cơ chế của bên xếp hạng openid.
- Giao diện người dùng sử dụng giá đỡ
- xác thực openid – sử dụng thư viện openid4java
- getreturntourl() trả về một url mà trình duyệt sẽ được hướng tới khi xác thực thành công.
- getconsumermanager() được sử dụng để lấy một thể hiện của lớp api openid4java. Lớp này sẽ xử lý tất cả các mẫu mã rp để thực hiện quá trình xác thực.
- performdetectyonusersuppliedidentifier() xử lý mọi vấn đề phát sinh trong quá trình xử lý.
- createopenidauthrequest() tạo cấu trúc yêu cầu xác thực cần thiết trong quá trình xác thực.
- processreturn() xử lý kết quả xử lý trả về từ yêu cầu xác thực.
- Nhận mã định danh do người dùng cung cấp: rp lấy mã mở của người dùng.
- Khám phá: rp sẽ bình thường hóa các số nhận dạng do người dùng cung cấp để quyết định op nào sẽ kết nối để xác thực và bằng cách nào.
- hiệp hội: Bước này là tùy chọn, nhưng bạn nên thêm quy trình xử lý. Đây là bước thiết lập kênh bảo mật kết nối rp và op.
- yêu cầu xác thực: rp yêu cầu op xác thực cho người dùng.
- Xác minh: rp yêu cầu phía op thực hiện xác minh người dùng để đảm bảo rằng thông tin liên lạc không bị giả mạo.
- được chuyển sang ứng dụng: rp di chuyển người dùng đến tài nguyên mà người dùng yêu cầu ban đầu.
- Người dùng đã cố truy cập tài nguyên được bảo vệ
- rp cần người dùng op authen
- op xác thực người dùng, trong trường hợp người dùng chưa đăng nhập
- rp xác định có cấp quyền truy cập tài nguyên cho người dùng hay không
- getservermanager() cấu hình và trả về một tham chiếu đến lớp servermanager của openid4java.
- getopendpointurl() trả về url điểm cuối nơi op nhận yêu cầu từ rp.
- processassociationrequest() sử dụng openid4java để khớp với yêu cầu op của rp.
- sendDiscoveryresponse() gửi yêu cầu khám phá tới rp.
- createauthresponse() tạo thông báo xác thực openid4java sẽ được gửi tới rp cùng với yêu cầu xác thực.
- buildauthresponse() là phương thức cốt lõi xử lý các yêu cầu trao đổi thuộc tính và đăng ký openid đơn giản.
- Yêu cầu truy cập tài nguyên được bảo vệ: Người dùng đã cố truy cập tài nguyên được bảo vệ trên rp.
- rp thực hiện khám phá: rp gửi yêu cầu khám phá tới op để thiết lập kết nối và so khớp
- op phản hồi yêu cầu khám phá: op phản hồi chính xác yêu cầu khám phá bằng cách gửi lại xrds (Trình tự mô tả tài nguyên mở rộng) thông qua sreg mở rộng, trao đổi thuộc tính (ax) hoặc yêu cầu chính sách xác thực nhà cung cấp openid (ap)) .xrds sẽ xác nhận rằng op là nhà cung cấp dịch vụ openid của người dùng.
- rp yêu cầu xác thực người dùng: rp và op kiểm tra xem người dùng có thể vượt qua xác thực không? Nếu đăng nhập thành công, rp sử dụng tiện ích mở rộng sreg, ax hoặc cả hai để yêu cầu thông tin về người dùng.
- op Xác thực người dùng: Nếu người dùng chưa đăng nhập hoặc có phiên không hợp lệ, anh ta sẽ yêu cầu thông tin xác thực. Nếu xác thực thành công, op sẽ thông báo cho rp và gửi mọi dữ liệu được yêu cầu qua sreg hoặc/và ax.
- rp cấp quyền truy cập: Người dùng được cấp quyền truy cập vào các tài nguyên được bảo vệ. Trên thực tế, hầu hết các rps sẽ kiểm tra quyền của người dùng trước khi cấp quyền truy cập.
Như tên ngụ ý, mã định danh do người dùng cung cấp là mã định danh do người dùng cung cấp cho rp. Số nhận dạng do người dùng cung cấp phải được chuẩn hóa thành số nhận dạng đã khai báo. Nói cách khác, số nhận dạng do người dùng cung cấp đã được chuyển đổi sang dạng chuẩn. Sau đó, số nhận dạng đã xác nhận có thể được sử dụng để xác định op thông qua một quy trình gọi là khám phá, sau đó op sẽ xác thực người dùng.
bên đánh giá mở
rp nhận một mã định danh do người dùng cung cấp sẽ được chuẩn hóa thành mã định danh đã khai báo. Trình duyệt của người dùng (“Tác nhân người dùng”) sẽ được chuyển hướng đến hành động để người dùng có thể nhập mật khẩu và được xác thực.
rp không biết và không quan tâm đến chi tiết về cách xác thực số nhận dạng đã yêu cầu. Nó chỉ muốn biết op đã xác thực user thành công hay chưa? Nếu được xác thực, tác nhân người dùng sẽ được chuyển hướng đến tài nguyên bảo mật mà người dùng đang cố truy cập. Nếu người dùng không thể được xác thực, rp từ chối cho phép truy cập.
Nhà cung cấp id mở (op)
Nhà cung cấp op hoặc openid chịu trách nhiệm cấp số nhận dạng và thực hiện xác thực người dùng. ops cũng cung cấp cơ chế quản lý dựa trên web cho openid. ops thu thập và lưu các thông tin cơ bản sau của từng người dùng:
Khi op được yêu cầu xác minh số nhận dạng đã yêu cầu, trình duyệt của người dùng sẽ được chuyển hướng đến trang đăng nhập nơi người dùng nhập mật khẩu của họ. Kiểm soát là op sau đó. Nếu người dùng được xác thực thành công, hành động sẽ hướng trình duyệt đến vị trí được chỉ định bởi rp(“return-to” url). Nếu người dùng không thể xác thực, họ có thể nhận được thông báo từ op cho biết rằng xác thực của họ không thành công.
Trở thành một bên đếm cởi mở
Bây giờ bạn đã hiểu các thành phần chính của openid và cách chúng khớp với nhau. Trong phần còn lại của bài viết này, tôi sẽ tập trung vào việc viết một trình đánh giá openid (rp) sử dụng thư viện mã nguồn mở openid4java.
Bước đầu tiên trong việc sử dụng openid là lấy mã định danh. Dễ thôi! Chỉ cần truy cập myopenid và nhấn nút Đăng ký một openid. Chọn một openid như redneckyogi hoặc jstevenperry. Mẫu đăng ký sẽ cho bạn biết nếu tên người dùng bạn chọn đã được sử dụng. Nếu chưa có ai sử dụng, bạn sẽ được hướng dẫn nhập mật khẩu, địa chỉ email, một số văn bản trong jcaptcha, v.v….
Sau vài phút, bạn sẽ nhận được email có URL. Truy cập url để xác nhận địa chỉ email của bạn – bây giờ bạn đã có một openid!
Giới thiệu về ứng dụng mẫu
Như tôi đã nói ở trên, tôi đã viết một ứng dụng web java sử dụng openid4java để tạo nhóm xếp hạng openid (rp). Đó là một ứng dụng đơn giản mà bạn xây dựng bằng cách thả tệp chiến tranh vào tomcat và chạy nó cục bộ. Ghi chú về ứng dụng mẫu này:
Cấu trúc code mẫu được chia thành 2 hàm lớn
Giới thiệu về openid4java và mã ứng dụng mẫu
Thông số kỹ thuật cho xác thực openid khá phức tạp. Nếu bạn có thời gian để thực hiện tất cả các thông số kỹ thuật, có thể bạn sẽ khá hài lòng với nó. Đối với tôi, tôi là một người lười biếng, vì vậy tôi đã chọn sử dụng thư viện openid4java. openid4java là việc triển khai tất cả các thông số kỹ thuật của xác thực openid, việc sử dụng openid trong lập trình sẽ dễ dàng hơn nhiều.
Danh sách mã sau đây sẽ cho thấy openid4java gọi rp bằng cách sử dụng api của openid.
Để giảm nhầm lẫn với wicket trong ứng dụng mẫu, tôi sẽ tách đoạn mã gọi openid4java trong lớp dịch vụ đăng ký (nằm trong com.makotogroup.sample.model). Lớp này chứa 5 phương thức tương ứng với việc sử dụng api openid4java:
Viết rp
Bản chất của authen là cho phép người dùng cung cấp danh tính của họ cho trang web của họ. Điều này bảo vệ quyền truy cập vào tài nguyên web khỏi truy cập không mong muốn hoặc độc hại. Sau khi người dùng chứng minh danh tính của mình, mạng sẽ quyết định có cấp cho người dùng đó quyền truy cập vào tài nguyên hay không.
Ứng dụng mẫu của bài viết này thực hiện một chức năng phổ biến đối với nhiều trang Web: đăng ký người dùng. Nó giả định rằng nếu người dùng có thể chứng minh danh tính của mình, thì anh ta có thể đăng ký. Đó là một tiền đề đơn giản, nhưng nó sẽ chứng minh cách thức hoạt động của một “cuộc trò chuyện” điển hình với op và cách sử dụng openid4java để thực hiện điều đó. Dưới đây là các bước cơ bản: Ứng dụng mẫu trong bài viết này thực hiện một chức năng rất phổ biến trong nhiều trang web: đăng ký thành viên. Giả định rằng nếu người dùng có thể chứng minh danh tính của mình thì người dùng đó sẽ được phép đăng ký. Công việc này sẽ mô tả cách “trò chuyện” với op và cách sử dụng openid4java để làm như vậy. Các bước cơ bản như sau:
Tải xuống mã nguồn tại đây: http://www.ibm.com/developerworks/library/j-openid/
Viết nhà cung cấp openid để xác thực đăng nhập một lần
Trong phần trước, chúng tôi đã tập trung vào trình đánh giá openid (rp) – điều này có nghĩa là một tài nguyên trực tuyến (như trang web hoặc mp3) sử dụng openid để đăng ký hoặc xác thực. Tuy nhiên, đây chỉ là một nửa trận chiến. Phần còn lại của thông số kỹ thuật về xác thực openid là của nhà cung cấp openid (op). OP hỗ trợ người dùng yêu cầu openid và xác thực người dùng theo cơ chế openid khi đăng nhập tài nguyên web.
Nhiều nhà cung cấp openid đã tồn tại (bao gồm cả myopenid – là tùy chọn cho hệ thống đăng ký ứng dụng web java mà chúng tôi đã đề cập trước đó trong bài viết này) và trong nhiều trường hợp, chúng tôi không cần phải xây dựng lại nó. Tuy nhiên, có khá nhiều kịch bản/yêu cầu mà bạn phải xây dựng các hoạt động của riêng mình. Đây là một cụm ứng dụng nơi nhiều ứng dụng chia sẻ tài nguyên trong mạng. Trong trường hợp này, bạn có thể phải thiết lập một hệ thống bảo mật – một “vòng khép kín” về bảo mật. Sẽ rất thuận tiện nếu cho phép người dùng đăng nhập vào tất cả các ứng dụng cùng một lúc thay vì đăng nhập vào từng ứng dụng riêng lẻ. Sau đó, có 1 ứng dụng trong nhóm ứng dụng đó đóng vai trò là op sẽ cho phép bạn thiết lập xác thực đăng nhập một lần cho tất cả các ứng dụng còn lại.
Trong phần này, chúng ta sẽ tập trung vào việc viết một trình cung cấp openid để bảo mật một tập hợp các ứng dụng theo cấu trúc “vòng khép kín”. Chúng ta sẽ bắt đầu bằng cách xem xét kỹ các lợi ích và kiến trúc của xác thực đăng nhập một lần, sau đó thực hiện theo cách của chúng ta thông qua việc viết một nhà cung cấp openid đơn giản cho một kiến trúc nhóm. Chúng tôi lại sử dụng opendid4java để cung cấp chức năng thời gian chạy cốt lõi cho xác thực hệ thống và đảm bảo rằng nhà cung cấp openid của chúng tôi sẽ tuân theo đặc tả xác thực openid.
Xác thực đăng nhập một lần
Trong một số trường hợp nhất định—thường là trong kinh doanh—việc kết hợp các ứng dụng có nhiều chức năng khác nhau và năng lực cốt lõi khác nhau sẽ hợp lý hơn là tích hợp tất cả các chức năng vào một ứng dụng. Loại nhóm ứng dụng này thường là cốt lõi b2b, nơi các đối tác có thể mang lại điều gì đó và tăng thêm giá trị cho các đề xuất liên quan đến kinh doanh. Một thách thức trong việc phát triển các cụm ứng dụng như vậy là xác thực. Nó sẽ không hoạt động theo cách xác thực từng người dùng riêng lẻ cho từng ứng dụng; ít nhất là không phải từ quan điểm của người dùng cuối. Trong hệ thống cụm sử dụng tiêu chuẩn openid để xác thực, mỗi đối tác ứng dụng sẽ xác thực các hoạt động. Mỗi ứng dụng đảm bảo rằng quyền truy cập vào các chức năng và tài nguyên của nó là an toàn và người dùng cuối có thể đăng nhập thuận tiện một lần mỗi phiên. Hãy để chúng tôi tìm hiểu thêm về các tác nhân tham gia vào hệ thống xác thực đăng nhập một lần trong các phần sau. Lưu ý rằng kiến trúc mà chúng ta thảo luận bên dưới dựa trên ứng dụng mẫu từ chương trước.
Mở nhóm đếm id (rp)
Một bên xếp hạng mở, là tài nguyên web hoặc chính trang web yêu cầu quyền truy cập an toàn vào nội dung đó. rp sử dụng nhà cung cấp openid (op) để xác thực người dùng. rp có thể sử dụng Đăng ký đơn giản mở rộng (sreg) và/hoặc Trao đổi thuộc tính (ax) để yêu cầu đăng ký hoặc xác định thông tin về người dùng. Khi rp yêu cầu authen op cho người dùng bằng cách gọi thư viện openid4java, nó sẽ đưa ra các yêu cầu sreg và ax.
Nhà cung cấp id mở (op)
Nhà cung cấp openid cung cấp xác thực cho tất cả các ứng dụng đối tác. Sau khi người dùng được xác thực thành công bằng cách gọi thư viện openid4java, op sẽ phản hồi các yêu cầu sreg và ax từ phía rp.
Giới thiệu về ứng dụng mẫu
Mục đích của ứng dụng mẫu này là giải thích cách openid rp và op phối hợp với nhau để bảo vệ tài nguyên khỏi bị truy cập trái phép.
Ứng dụng mẫu chứa mã cho rp và op để bạn có thể xem cách chúng hoạt động cùng nhau. Trên thực tế, bạn sẽ không triển khai cả hai thành phần trong cùng một ứng dụng, đây chỉ là mã mẫu để bạn tham khảo cách chúng tương tác với nhau.
Danh sách mã trong ứng dụng mẫu
Danh sách mã
trong phần này mô tả cách openid4java gọi op (và rp) để sử dụng openid. openidproviderservice.java chứa một số phương thức tương ứng với việc sử dụng api openid4java.
Để xây dựng ứng dụng, hãy chạy ant [ref] và xây dựng mục tiêu chiến tranh, sau đó sao chép tệp chiến tranh vào thư mục ứng dụng web của Tomcat và khởi động Tomcat.
xác thực openid: từng bước
Khi người dùng cố gắng truy cập tài nguyên được bảo vệ từ người đánh giá (rp), trước tiên rp xác định người mà họ cho biết người dùng là ai (xác thực), sau đó quyết định có cấp quyền truy cập ko (ủy quyền) hay không. Mục đích của phần này là xác thực, vì vậy ứng dụng mẫu sẽ cấp quyền truy cập vào các tài nguyên được bảo vệ nếu người dùng được nhà cung cấp openid (op) xác thực. Trên thực tế, rp cũng thực hiện các chức năng giống như ủy quyền.
Khi chạy ứng dụng mẫu, bạn sẽ thấy một màn hình có tài nguyên được bảo vệ. Chuỗi sự kiện sau đây mà tôi sẽ mô tả chi tiết hơn trong các phần tiếp theo:
Tải xuống mã nguồn tại đây: http://www.ibm.com/developerworks/library/j-openid2/
Dịch toàn bộ tài liệu tham khảo