Logowanie
Sugester poza ręcznym zakładaniem użytkowników oferuje również synchronizacje "do wewnątrz" z innymi serwisami poprzez powszechnie stosowane protokoły Simple SSO oraz Multipass SSO. Za pomocą ww. protokołów Sugester jest w stanie uwierzytelniać użytkowników z zewnętrznej bazy. Simple SSO wymaga jedynie skonfigurowania linku (logowanie > simple sso > sso url) do logowania w zewnętrznym serwisie. Multipass poza linkiem (logowanie > multipass sso > multipass url) potrzebuje także prywatnego tokenu (logowanie > multipass sso > multipass token), w którego posiadaniu powinna być administracja zewnętrznego serwisu. Multipass jest trudniejszy w konfiguracji, ale w zamian zapewnia większe bezpieczeństwo danych.
Ustawienia Multipass
Aby włączyć multipass, należy Przejść do Menu Ustawienia>Ustawienia konta>Integracje i w polu Sposób logowania wybrać multipass.https://prefix.sugester.pl/login?multipass=fqB_bZWoX1qU30I7habsB-5IFG00-SBsaSFkJLPjUPib94ub0YZrb_i0nUnhwdG6uTPaQ3ylnUxT45Pyl8JTuXtOkHWsbb1hWCN2YyEfqPJrDkqsEXBLanQgnmUQYz6PKXvW9KX-LxUnAlxIBHxtun14NExcAN_5W51QLjiSJiyZmAfq8mu_pV-3lvNTkdfoH9on7B5X8FWZbza2dI23PH1dCqQcFg%3D%3D&strong=trueSugester sprawdza poprawność zapytania i odszyfrowuje dane:
- login użytkownika - zawsze
- jego adres email - tylko podczas pierwszego logowania (w celu założenia konta)
- termin utworzenia zapytania
- opcjonalnie url, na który użytkownik będzie przekierowany po udanym logowaniu
- opcjonalny nick, który zostanie nadany użytkownikowi po udanym logowaniu
require "openssl"
require "base64"
require "time"
require "json"
module MultipassExampleCode
CURRENT_CIPHER_METHOD = {
cipher: 'aes-256-gcm',
encryption_key_length: 32,
iv_length: 12,
use_final: false,
}
def self.encode(multipass_secret, data, iv = nil)
cipher_m = CURRENT_CIPHER_METHOD
key_material = OpenSSL::Digest.new("sha256").digest(multipass_secret)
encryption_key = key_material[0, cipher_m[:encryption_key_length]]
signature_key = key_material[cipher_m[:encryption_key_length], cipher_m[:encryption_key_length]]
data["created_at"] ||= Time.now.iso8601
cipher = OpenSSL::Cipher.new(cipher_m[:cipher])
cipher.encrypt
cipher.key = encryption_key
iv ||= cipher.random_iv
cipher.iv = iv
ciphertext = iv + cipher.update(data.to_json)
ciphertext += cipher.final if cipher_m[:use_final]
sign = OpenSSL::HMAC.digest("sha256", signature_key, ciphertext)
Base64.urlsafe_encode64(ciphertext + sign)
end
end
multipass = MultipassExampleCode.encode(
"your multipass token",
{
'login' => 'example_login',
'email' => 'example_email.example.com', # Required only for create account
'url' => '/app/acitivities', # Optional parameter - redirect url
'nick' => 'example_nick' # Optional parameter - nick for user.
}
)
puts "https://prefix.sugester.pl/login?multipass=#{multipass}&strong=true"
UWAGI
Nasz multipass działa zgodnie z mechanizmem zaproponowanym przez serwis Shopify.