Sso là gì

1. SAML là gì?

Nếu chúng ta đã từng nghe OAuthtuyệt OAuth2thì SAMLđó là một chuẩn chỉnh khác để giải quyết và xử lý bài tân oán giống như với OAuthvới OAuth2.

Bạn đang xem: Sso là gì

Bài tân oán mà những chuẩn trên giải quyết thương hiệu là SSO (Single Sign On).

SSOnảy sinh trường đoản cú vấn đề Khi những bên hỗ trợ hình thức ý muốn người dùng có thể thực hiện những hình thức dịch vụ khác biệt cơ mà chỉ cần đăng nhập vào trong 1 nơi duy nhất, hỗ trợ cho việc thực hiện được tiện lợi cũng giống như giúp cho người sử dụng cai quản các username cùng password được giảm xuống về tối tphát âm, thì yên cầu cần phải có một bí quyết như thế nào đó rất có thể đảm bảo cùng ủy quyền ban bố người tiêu dùng cơ mà không đề nghị bắt bọn họ tạo thành tài khoản không giống nhau trên đa số hình thức dịch vụ không giống nhau.

Crúc ý: SAMLtự động xử lý cả 2 vấn đề đúng đắn (authentication)cùng ủy quyền (authorization)tuy thế OAuthvới OAuth2chỉ tự động hóa giải quyết và xử lý được vấn đề uỷ quyền(link xem thêm trên đây).

SAML(Security Assertion Markup Language) là một trong những "chuẩn mở" cho phép công ty cung ứng thực thể (Identity Provider - IdP) chính xác người tiêu dùng với ủy quyền cho tất cả những người sử dụng sử dụng một dịch vụ nào kia của nhà cung ứng dịch vụ(Service Provider - SP) mà lại không nên người dùng phải lập thông tin tài khoản đăng nhtràn lên hình thức đó.

Định nghĩa như bên trên gọi sẽ khó hiểu, nhưng lại nếu bạn biết nút ít "Đăng nhập bằng Facebook" sinh sống một vài trang web thì mục tiêu của chiếc nút ít kia đó là mục đích của SAML.

2. Cách hoạt động vui chơi của SAML.

*

Tại hình trên thì: SPlà bên cung ứng hình thức dịch vụ (là ứng dụng tất cả nút ít "Đăng nhập bởi Facebook" ấy), IdPlà đơn vị hỗ trợ các thực thể (tài khoản người tiêu dùng - IdPsinh hoạt đây là Facebook đấy).

Cách 1: User vẫn clichồng vào nút ít "Đăng nhập bằng tài khoản của cái gì đó" trường đoản cú browser, request này sẽ tiến hành gửi đến SP.Cách 2: Phía SPsẽ khởi tạo ra một SAML Requestnhằm gửi tặng IdP, SAML Requestnày sẽ được bao gồm SPcam kết điện tử (sign) bằng văn bản ký kết của SP (chữ cam kết của SPhường tại đây chính là khóa bí mật của SP).Bước 3: Phía IdPKhi cảm nhận SAML Requesttừ bỏ SPđang buộc phải xác thựcchữ ký kết có và đúng là của SPhay không bằng phương pháp dùng khóa công khai minh bạch của SPnhằm xác thực:

Khóa công khai minh bạch của SPnày IdPmang tự đâu?

Trước khi triển khai giao dịch thanh toán, SPvới IdPbuộc phải bằng cách làm sao kia dàn xếp được khóa công khaicùng nhau trước (chưa phải khóa túng bấn mậtnhé). Thông thường, từng mặt SPIdPsẽ sở hữu một public url chứa metadata, metadatanày cất các công bố công khai như làkhóa công khai, ID thực thểvới URL để điều hướng lúc bao gồm request cho. Phía IdPsẽ biết được metadata url của SPnhằm trường đoản cú đó lôi ra khóa công khai của SPđể xác xắn chữ ký kết của SP. Trong trường đúng theo khối hệ thống của Idpsẽ tất cả sẵn và không mang public key của SPthông qua metadata urlđược thì SPnên gửi khóa công khai của mìnhmang lại Idpsetup trước khi thực hiện thanh toán giao dịch.

Bước 4: Vẫn sẽ ở IdP, sau khoản thời gian xác xắn được chữ ký của SPrồi, IdPđang có tác dụng hồ hết lắp thêm sau:Lấy ra thông báo người tiêu dùng đang sử dụng browser (nếu như người dùng đã đăng nhtràn lên IdP, còn nếu như người dùng đã không singin thì bắt người tiêu dùng đăng nhập trước) nhằm redirect (http post) về mang đến SPsử dụng (công dụng trả về này mình gọi là SAML Response). Trước Khi gửi về mang đến SPthì IdPđã ký kết năng lượng điện tử (sign)vào SAML Responsebởi khóa kín của IdP.Không mọi IdP. cam kết vào SAML Responsemà lại IdPcũng trở nên mã hóa những công dụng tài liệu (SAML Assertions) gồm trong SAML Response bằng khóa công khai minh bạch của SPhường.Cách 5: Khi SPnhận được SAML Response, nó sẽ tiến hành những bài toán sau:Dùng khóa công khai minh bạch của IdPnhằm xác thựccoi bao gồm và đúng là công dụng được gửi từ IdPhay không (phía trên đó là phần xác thựcnhưng mà OAuthvới OAuth2không có). Khóa công khai minh bạch của IdPcũng giống như nhắc tới ở bên trên, hoàn toàn có thể mang trải qua metadata url của IdPhoặc hoàn toàn có thể được dàn xếp trước.Nếu đảm bảo đúng chữ ký kết, SPđã liên tục sử dụng khóa công khai của bao gồm mìnhđể giải mãi SAML Assertionsđã được mã hóa tự phía IdP.Lấy các lên tiếng dữ liệu người tiêu dùng vào SAML Assertionsnhằm singin người dùng vào khối hệ thống của chính mình, với trả về cho người sử dụng thông báo thành công xuất sắc (tuyệt điều phối người tiêu dùng cho tới các tài nguyên mong mỏi muốn).

Phía trên tôi đã trình diễn kim chỉ nan phần buổi giao lưu của SAML, bên dưới đây là phần thực hành thực tế sử dụng SPlà server Rails và IdPOkta.

Xem thêm: Cách Sửa Lỗi Đăng Nhập Lol Không Nhận Phản Hồi Từ Máy Chủ Khi Đăng Nhập Lol

3. Cấu hình SAML trong Rails sử dụng IdPhường. là Okta.

Trong trường thích hợp này: Ứng dụng Rails của khách hàng chính là SP, với ứng dụng bạn tạo thành trên Okta đó là Idp.

3.1. Cấu hình vào Rails.

Source code trong rails:

# /config/routes.rb scope module: :mrs, controller: "saml_sessions" do get :new, path: "saml/sign_in", as: :new_mr_sso_session post :create, path: "saml/auth", as: :mr_sso_session get :metadata, path: "saml/metadata", as: :metadata_mr_sso_session end# /controllers/mrs/saml_sessions_controller.rbclass Mrs::SamlSessionsController

Cơ bạn dạng source code trong rails chỉ có nhỏng trên thôi. Phần cài đặt của SAMLphía bên trong method saml_settings:

Url của metadata của IdPchính là url nằm trong câu lệnh idp_metadata_parser.parse_remote(...).settings.issuerchính là SPhường. identity, là tên của thưc thể SP, hay nó sẽ tiến hành gán mang đến quý giá làurl của metadata của SP. Sau Khi thiết lập kết thúc các bạn truy vấn vào đường links http://localhost/mrs/saml/metadatathì nó sẽ tự động hóa render ra dữ liệu metadatacho chính mình.assertion_cosumer_service_urllà url để IdPtrả kết quả lại cho SP. Khi SP thừa nhận công dụng trường đoản cú IdP, nó vẫn so sánh url tất cả trong SAML Responsecùng với url này nhằm tuyệt đối xem gồm đúng kết quả được trả về đúng can hệ ko, còn nếu như không đúng vẫn báo lỗi.settings.certificatelà khóa công khai của SP, SPbuộc phải knhị báo nó ở đây nhằm chuẩn xác chữ cam kết của IdP.Với method metadatasinh hoạt trên thì khi bạn truy cập vào http://localhost/mrs/saml/metadata, rất nhiều ban bố quan trọng knhị báo vào saml_settingssẽ được public ra internet (phần đông ban bố bí mật sẽ không còn được công khai).settings.private_keylà khóa kín đáo của SP, SPbắt buộc khai báo nó ở chỗ này nhằm cam kết vào vào SAML request muốn gửi tới mang lại IdP.authn_requests_signedlà cũng muốn vào SAML request gửi đến IdPtốt không? Tại bên phía IdPcó thể không đề nghị đảm bảo chữ cam kết của SPmặc dù bên SPbao gồm ký hay không.want_assertions_signedlà có những hiểu biết SAML Assertionsđược IdPký không? Bên phía IdPrất có thể ko đề nghị ký kết vào SAML Assertionsmặc dầu bên SPcó đòi hỏi hay không. Sẽ không tồn tại lỗi gì được báo mặc dù bên SPhưởng thụ IdPcam kết mà lại IdPko cam kết.

Quý Khách xem xét trong hàm createkhông đem userbằng tin nhắn được gửi về từ bỏ okta (IdP) nhưng ta mong muốn IdPgửi về một nằm trong tính khác (LastNametrong đoạn code trên).

Để chế tạo ra certificatevới private_keyngơi nghỉ trên, bạn chạy câu lệnh dưới đây trong terminal:

openssl req -new -x509 -days 365 -nodes -sha256 -out key.crt -keyout p_key.pemNó sẽ khởi tạo ra cho bạn một cặp khóa public keykey.crtvới private keyp_key.pem. Khóa sẽ có hạn là 365ngàgiống như mình chỉ định vào câu lệnh bên trên.

3.2. Tạo áp dụng IdPhường trên okta.

Thứ nhất bạn phải làm là biến hóa đồ họa trên okta tự Developer Consolethành Classic UIthì mới tạo nên app:

*

Chọn tab Applicationscùng chọn Add Application:

*

Khi chế tạo ra App thì lựa chọn Platform là Webcùng SAML 2.0:

*

Trong phần setting của App bạn chọn nhỏng sau:

*

Single sign on URL: làassertion_cosumer_service_urlvào cấu hình rails (xem giải thích ở trong phần trên).

Audience URI (SPhường Entity ID): làissuervào thông số kỹ thuật rails.

Trong phần Attribute Statements (Optional), bạn điền Namelà LastNamecùng Valuelà user.lastName, phía trên chính là tên và quý hiếm nhưng bạn muốn IdPđã trả về đến SPbên cạnh cực hiếm mặc định là email(coi method createvào Rails tại đoạn trên).

Chú ý là quý giá của Valueđề nghị luôn là user.field, và chỉ lấy được những ở trong tính fieldtất cả sẵn của uservào okta.

Cliông chồng vào Show Advanced Settingsvới tùy chỉnh nhỏng sau:

*

Để thiết lập được phần này chúng ta đề xuất gọi được phần Cách hoạt động vui chơi của SAMLmình lý giải sinh hoạt đầu. Một số thông số kỹ thuật đề nghị để ý là:

Response: Bạn vẫn muốn IdP. ký điện tửvào response trả về đến SPkhông?

Assertion Signature: quý khách hàng có muốn IdP. ký kết điện tửvào SAML assertions phía trong SAML responsekhông?

Assertion Encryption: Bạn cũng muốn IdPmã hóa SAML assertionstrả về mang lại SPkhông?

Encryption Certificate: Nếu bạn có nhu cầu IdPmã hóa SAML Assertionthì chúng ta đề nghị hướng dẫn và chỉ định SP public key ở phía IdP. Đây chính là tệp tin public keykey.cercủa SPcác bạn tạo nên sống bên trên, chúng ta upload file này lên okta.

Sau Khi chấm dứt thiết đặt settings, bạn phải gán app vừa tạo cho một tài khoản thì mới request được trường đoản cú SPcủa bạn tới IdP. Clichồng vào tab Assignmentsrồi chọn Assign khổng lồ People:

*

Tại tab Sign On, bạn sẽ thấy những đọc tin cần thiết của IdPđể cấu hình trong SPcủa bạn:

*

Nếu bạn muốn các lên tiếng riêng biệt của IdPthì click vào View Setup Instructions, còn nếu khách hàng chỉ ước ao metadata url của IdPđể SPcủa bạn cũng có thể auto mang thông báo (nlỗi bản thân làm vào phần saml_settings trong rails làm việc trên) thì cliông xã vào Identity Provider metadatanhằm hiển thị lên tiếng metadata của IdPcùng đem url của chính nó, phần cấu hình auto mang ban bố của IdP từ metadatađó là câu lệnh này trong rails:

settings = idp_metadata_parser.parse_remote("https://dev-879121.okta.com/app/abcefasdfasfafa/sso/saml/metadata")

Sau Khi đang setup SPcùng IdPchấm dứt thì các bạn truy cập vào url http://localhost:3001/mrs/saml/sign_innhằm demo (bản thân dùng cổng 3001 mang đến rails app).

Link tmê man khảo:

https://en.wikipedia.org/wiki/SAML_Metadata

https://developer.okta.com/standards/SAML/setting_up_a_saml_application_in_okta/

https://security.stackexchange.com/questions/133065/why-is-it-a-bad-idea-to-use-plain-oauth2-for-authentication

https://stackoverflow.com/questions/12779532/differences-between-sp-initiated-sso-and-idp-initiated-sso