2013-08-18 33 views
7

Điều tôi đang cố gắng có cuối cùng là khả năng đăng nhập bình thường với suy nghĩ HOẶC chọn đăng nhập bằng SAML. Vì vậy, tôi đọc rằng nếu tôi tích hợp omniauth và saml, sau đó omniauth và đưa ra, tôi có thể đạt được điều đó.Rails - Sử dụng omniauth-saml với nhiều IDPs

Vấn đề của tôi là tôi có các IDP khác nhau mà tôi muốn chọn. Vì vậy, tôi không có một: idp_sso_target_url, nhưng nhiều. Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể tự động thay đổi giá trị của target_url. Hiện nay đá quý omniauth-saml xác định giá trị này trong thư mục config/initializers ..

Cảm ơn bạn,

Trả lời

3
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :saml, 
    name: "first", 
    assertion_consumer_service_url: "/auth/first/callback", 
    issuer: "your-app", 
    idp_sso_target_url: "first.com/idp" 
    idp_cert_fingerprint: "E7:91:B2:E1:...", 
    name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 
    provider :saml, 
    name: "second", 
    assertion_consumer_service_url: "/auth/second/callback", 
    issuer: "your-app", 
    idp_sso_target_url: "second.com/idp", 
    idp_cert_fingerprint: "E7:91:B2:E1:...", 
    name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" 

end 
4

Bạn có thể lưu cài đặt cho tất cả các nhà cung cấp trong db, và sau đó cấu hình omniauth trong giai đoạn thiết lập tại thời gian yêu cầu. Ví dụ:

SETUP_PROC = lambda do |env| 
    request = Rack::Request.new(env) 
    user = User.find_by_subdomain(request.subdomain) 
    env['omniauth.strategy'].options[:consumer_key] = user.consumer_key 
    env['omniauth.strategy'].options[:consumer_secret] = user.consumer_secret 
end 

use OmniAuth::Builder.new do 
    provider :twitter, :setup => SETUP_PROC 
end 

Xem https://github.com/intridea/omniauth/wiki/Setup-Phase để biết thêm thông tin.

0

Nếu sử dụng ứng dụng trong ngữ cảnh liên kết, có nhiều khả năng nguồn siêu dữ liệu, chẳng hạn như được quy định trong cấu hình saml2int.org. Siêu dữ liệu này có dữ liệu để phổ biến IDP khám phá (và tự động định cấu hình tất cả IDP). Có vẻ như omniauth-saml không hỗ trợ đặc tả Siêu dữ liệu SAML, do đó một số loại proxy SAML là giải pháp thay thế.

0

Sử dụng nhiều SAML người vô gia cư với lập mưu + OmniAuth:

Thực hiện theo hướng dẫn chính thức này cho đơn IDP.

https://github.com/omniauth/omniauth-saml#devise-integration

Một khi bạn có SP bạn làm việc với IDP đơn, đừng chỉnh sau

  1. Trong devise initializer

    config.omniauth :first, { 
              name: :first, 
              strategy_class: ::OmniAuth::Strategies::SAML, 
              #Rest of the config as per omniauth-saml guide 
              assertion_consumer_service_url: '/users/auth/first/callback'} 
    
    
    
    config.omniauth :second, { 
              name: :second, 
              strategy_class: ::OmniAuth::Strategies::SAML, 
              #Rest of the config as per omniauth-saml guide 
              assertion_consumer_service_url: '/users/auth/second/callback'} 
    
  2. Trong Users::OmniauthCallbacksController, thêm hành động mang tên firstsecond trong thay vì saml như được đề xuất trong hướng dẫn chính thức.

  3. Trong mô hình User của bạn:

    devise :omniauthable, omniauth_providers: [:first, :second] 
    

Nếu tất cả các cấu hình đúng, bây giờ bạn có SP bạn cấu hình cho hai người vô gia cư.

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