#coding=utf-8 require 'base64' require 'json' require 'openssl' ## 单点登录 <=> 北斗 class SsosController < ApplicationController skip_before_filter :check_if_login_required layout false def show begin # suRh2nFEJd0Ai_TFbqZ-1yQXnGfIB-YD_f4KTA3O4dQGSBMiXfOMt-0mzizgXekWTjHKfn62nJ60iHM3_eY_KS0Qn8SF8vANfa46GhzZRt4T0iC5ZOSs4cWeK43OU0RoekQLZZAo5OyOVibxabmiPGzEFCnVVtdmRk9d7X_B0Is= @auth = params[:auth] @options = parse(params[:auth]) if params[:login].present? @options["name"] = params[:login] end logger.debug @options ## 认证 sso = login(@options) ## 加入组织 @organization = Organization.find(82) unless @organization.org_members.exists?(user_id: sso.user_id) member = OrgMember.new(:user_id => sso.user_id) @organization.org_members << member end ## 选择性跳转 redirect_to @organization rescue => e logger.error e if e.message == "exist user" render 'ssos/show', :layout => false else raise e end end end ## 改用户名 def create show and return end private def base64_safe(content) content = content.gsub('-', '+') content.gsub('_', '/') end def parse(auth) crypted_str = Base64.decode64(base64_safe(auth)) pkey = OpenSSL::PKey::RSA.new(File.new(File.join(Rails.root,"config/private.key"))) content = pkey.private_decrypt(crypted_str,OpenSSL::PKey::RSA::PKCS1_PADDING) # content = pkey.private_decrypt(crypted_str) ActiveSupport::JSON.decode(content) end def login(opt) sso = Sso.sync_user(opt) start_user_session(sso.user) sso end end