ben

OMÜ , Bilgisayar Mühendisliği, 13'

24 Haziran 2016 Cuma

One Client Multiple Provider

Daha önceki doorkeeper ile yapmış oldugumuz single sign in üzerinde farklı bir yapı oluşturabiliriz. Örneğin bir client uygulaması birden fazla provider tarafından oturum açılması istenirse client tarafında provider ayarlarını değiştirmemiz gerekiyor.

Örneğin client uygulamasında hem A uygulamasında hemde B uygulamasındaki hesapla oturum açılabilmesi için aşağıdaki değişikliği yapmamız gerekiyor. değişiklikler buradakı kodların üzerinden yapıldı. Sıfırdan yazıyorsanız ilk önce burdaki yazılanları uygulayın

Provider tarafında  herhangi bir farklılık yok daha cok client tarafını kurcalayalım.

lib/omnioauth/strategies/app_a_doorkeeper.rb oluşturalım
içeriği doorkeperla aynı sadece aşağıdaki kısmı değiştirelim

    class AppADoorkeeper < OmniAuth::Strategies::OAuth2
      option :name, :app_a_doorkeeper

lib/omnioauth/strategies/app_b_doorkeeper.rb oluşturalım
içeriği doorkeperla aynı sadece aşağıdaki kısmı değiştirelim

    class AppBDoorkeeper < OmniAuth::Strategies::OAuth2
      option :name, :app_b_doorkeeper


config/application.rb

 config.UygulamaAAppID = 'providerda kayıtlı uygulama A ya ait appıd'
 config.
UygulamaAAppSecret=' providerda kayıtlı  uygulama A ya ait appsecret'
 config.
UygulamaAAppSite="uygulama A ya ait provider site adresi"
 

config.UygulamaBAppID = 'providerda kayıtlı uygulama B ye ait appıd'    config.UygulamaBAppSecret='providerda kayıtlı  uygulama B ye ait appsecret'    config.UygulamaBAppSite="uygulama B ye ait provider site adresi"


config/itilializers/omnioauth.rb

module OmniAuth::Strategies

  class UygulamaADoorkeper < Doorkeeper
    def name
      :uygulama_a_doorkeeper
    end
  end

  class UygulamaBDoorkeper < Doorkeeper
    def name
      :uygulama_b_doorkeeper
    end
  end
 end


config/itilializers/devise.rb

require File.expand_path('lib/omniauth/strategies/uygulama_a_doorkeeper', Rails.root)
require File.expand_path('lib/omniauth/strategies/uygulama_b_doorkeeper', Rails.root)


Devise.setup do |config|
          *
          *
  config.omniauth :uygulama_a_doorkeeper,  Rails.application.config.UygulamaAAppID,  Rails.application.config.UygulamaAAppSecret,
  :client_options =>  {:site => Rails.application.config.UygulamaAAppSite}

  config.omniauth :uygulama_b_doorkeeper,  Rails.application.config.UygulamaBAppID,  Rails.application.config.UygulamaBAppSecret,
  :client_options =>  {:site => Rails.application.config.UygulamaBAppSite}
end


model/user.rb

 devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,:omniauthable,:omniauth_providers => [:uygulama_a_doorkeeper,:uygulama_b_doorkeeper]



controller/omnioauth_callbacks_controller.rb

def uygulama_a_doorkeeper
        oauth_data = request.env["omniauth.auth"]
        *
        *
end

def uygulama_b_doorkeeper
        oauth_data = request.env["omniauth.auth"]
        *
        *
end



views/admin/session_controller.rb

<%=link_to "Sign in Uygulama A", user_omniauth_authorize_path(:uygulama_a_doorkeeper) %>
<%=link_to "Sign in Uygulama B", user_omniauth_authorize_path(:uygulama_b_doorkeeper) %>




Providerda oluşturduğumuz redirect_uri de şu şekilde değişmeli:

http://localhost:5000/users/auth/uygulama_a_doorkeeper/callback

Hiç yorum yok: