omniauth-colorgy-oauth2 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94da4a452dca3e370d41b977b59e8afb012dd302
4
- data.tar.gz: 94012e54bf4185e77dd66a403627fecce3da70ec
3
+ metadata.gz: 761943b85e3233140e27f0c47719fed1a005337f
4
+ data.tar.gz: 6e267348560e44db0f5964d78d8ac6fe22d99272
5
5
  SHA512:
6
- metadata.gz: 0abe4493c950009dfd16d859cefa94609563275b9f0b90c831d65c72a6fbcd97147af007c18476c6e996c5658fabd2085c63a720f3fb6bb9adefe65c71ccc6a9
7
- data.tar.gz: d25810bfc07fb0790fe550e883f696dc2222e15e27b16920e3ee15ed1ecb35802b24fca8ebfc83762ff303e5e9a02dfcb665a951597bce11d85b644549527f6d
6
+ metadata.gz: 49b05775dd6c8e0d83d43301f4e0f7784c3c59872fd8241c400be2e3cbdd5915b18b54f09aa2b1889cec508e425944aa5167b10c79ff67ea73e0d680c4d7da86
7
+ data.tar.gz: 182a6b13b5c534772d2b45fca99418bc86155e37ba4fa2f3288b4883cc94d06e374dfe922b55a089f9c4083dd7cccdbee2703efc5ddf1f38a7bdc966d71f4c3f
data/README.md CHANGED
@@ -129,13 +129,14 @@ _(Optional)_
129
129
 
130
130
  The Colorgy SSO system is implemented using **OAuth 2.0** as the authorization protocol and **Sign-on Status Tokens (SST)** as credential of the sign-on status of the user, achieving sign in and out seamlessly controlled by a central server.
131
131
 
132
- The **Sign-on Status Token (SST)** is stored in an cross-domain cookie (`_sst`) to represent the sign on status of the current user. SSTs are trully [JSON Web Tokens (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token) containing identification information, signed by a RSA private key. Clients (other services under this SSO system) will be able to decode and verify the infomation using a corresponding RSA public key, and make reasonable reactions according to the infomation it provided.
132
+ The **Sign-on Status Token (SST)** is stored in an cross-domain cookie (`_sst`) to represent the sign on status of the current user. **SST**s are trully [JSON Web Tokens (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token) containing identification information, signed by a RSA private key. Clients (other services under this SSO system) will be able to decode and verify the infomation using a corresponding RSA public key, and make reasonable reactions (signs in or out the user, reauthorize from the server... etc.) according to the infomation it provided.
133
133
 
134
134
  This gem has implemented some solutions to cover certain use cases.
135
135
 
136
-
137
136
  ### Using Devise With Rails: `ColorgyDeviseSSOManager`
138
137
 
138
+ _An `ActiveSupport::Concern` to drop into your `ActionController` directly without any configurations to enable SSO support, if you're using devise and omniauth already._
139
+
139
140
  > Limitations: since this tactic relys on sharing a cookie accross Colorgy core and your app, your app should be running on a subdomain of Colorgy core to make this work.
140
141
 
141
142
  First, make sure Devise is setup properly to OmniAuth with Colorgy - clicking the 'Sign in with Colorgy' link will sign you in with no doubts.
@@ -177,7 +178,9 @@ end
177
178
 
178
179
  _`FlashMessageReporter` is optional, include it if you want to relay flash messages from core to your app ._
179
180
 
180
- One last step: unlike URL of the core SSO server can be guessed by OmniAuth and Devise configurations, the **RSA public key** used to verify SST isn't. So you need to pass it in manually using an environment variable called **`CORE_RSA_PUBLIC_KEY`**. Put it in your `.env` or export it like this: `export CORE_RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3D ... P2QIDAQAB\n-----END PUBLIC KEY-----\n'`. Make sure it's accessible via `ENV['CORE_RSA_PUBLIC_KEY']` in your app.
181
+ > This `ActiveSupport::Concern` is zero-configured since we can guess the URL of Core SSO by OmniAuth and Devise configurations, get the RSA public key automatically from the server, and use the User model's `uuid` (or `cid`, `sid`) and `refreshed_at` (or `synced_at`) by convention to perform certain actions like checking the user's identity or last refresh date.
182
+
183
+ > You can also manually specify the RSA public key used to verify SSTs. Just pass it in using an environment variable called **`CORE_RSA_PUBLIC_KEY`**. Put it in your `.env` or export it like this: `export CORE_RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3D ... P2QIDAQAB\n-----END PUBLIC KEY-----\n'`. Make sure it's accessible via `ENV['CORE_RSA_PUBLIC_KEY']` in your app.
181
184
 
182
185
  Now that users on your app will be signing in/out synchronizedly with Colorgy core, and is automatically reauthorized to get user's new data from core when updated.
183
186
 
@@ -17,26 +17,30 @@ module ColorgyDeviseSSOManager
17
17
  sign_out_url
18
18
  end
19
19
 
20
- # Override the destroy_user_session_path to logout from core
21
- def destroy_user_session_path
22
- sign_out_url
23
- end
24
-
25
20
  private
26
21
 
27
22
  # Getter of the core domain
28
23
  def core_domain
29
- @@core_domain ||= URI.parse(Devise.omniauth_configs[:colorgy].options[:client_options][:site]).host
24
+ @@core_domain ||= URI.parse(core_url).host
30
25
  end
31
26
 
32
27
  # Getter of the core url
33
28
  def core_url
34
- @@core_url ||= Devise.omniauth_configs[:colorgy].options[:client_options][:site]
29
+ @@core_url ||= if Devise.omniauth_configs[:colorgy].options[:client_options].is_a?(Hash)
30
+ Devise.omniauth_configs[:colorgy].options[:client_options][:site]
31
+ else
32
+ OmniAuth::Strategies::Colorgy.new(0).options.client_options.site
33
+ end
34
+ end
35
+
36
+ # Getter of the core rsa public key string
37
+ def core_rsa_public_key_string
38
+ @@core_rsa_public_key_string ||= (ENV['CORE_RSA_PUBLIC_KEY'] || Net::HTTP.get(core_domain, '/_rsa.pub')).gsub(/\\n/, "\n")
35
39
  end
36
40
 
37
41
  # Getter of the core rsa public key
38
42
  def core_rsa_public_key
39
- @@core_rsa_public_key ||= OpenSSL::PKey::RSA.new(ENV['CORE_RSA_PUBLIC_KEY'].gsub(/\\n/, "\n"))
43
+ @@core_rsa_public_key ||= OpenSSL::PKey::RSA.new(core_rsa_public_key_string)
40
44
  end
41
45
 
42
46
  # Decode the sign-on status token (sst) string and return a hash
@@ -107,7 +111,7 @@ module ColorgyDeviseSSOManager
107
111
 
108
112
  # if the user isn't signed in but the sst isn't blank,
109
113
  # redirect to core authorize path
110
- elsif !sst.blank?
114
+ elsif !sst.blank? && request.get? && is_navigational_format?
111
115
  redirect_to user_omniauth_authorize_path(:colorgy) and return
112
116
  end
113
117
  end
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
- module ColorgyOauth2
3
- VERSION = "0.1.0"
2
+ module ColorgyOAuth2
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -1,8 +1,10 @@
1
1
  require "omniauth/colorgy_oauth2/version"
2
2
  require File.join('omniauth', 'strategies', 'colorgy')
3
+ OmniAuth.config.add_camelization('colorgy_oauth', 'ColorgyOAuth')
4
+ OmniAuth.config.add_camelization('colorgy_oauth2', 'ColorgyOAuth2')
3
5
 
4
6
  module OmniAuth
5
- module ColorgyOauth2
7
+ module ColorgyOAuth2
6
8
  CORE_URL = 'https://colorgy.io'
7
9
  end
8
10
  end
@@ -1,3 +1,6 @@
1
1
  require File.join('omniauth', 'colorgy_oauth2')
2
- require File.join('flash_message_reporter') if defined? ActiveSupport::Concern
3
- require File.join('colorgy_devise_sso_manager') if defined? Devise && defined? ActiveSupport::Concern
2
+ OmniAuth.config.add_camelization('colorgy_oauth', 'ColorgyOAuth')
3
+ OmniAuth.config.add_camelization('colorgy_oauth2', 'ColorgyOAuth2')
4
+
5
+ require File.expand_path(File.join('..', '..', 'app', 'controllers', 'concerns', 'flash_message_reporter'), __FILE__) if defined? ActiveSupport::Concern
6
+ require File.expand_path(File.join('..', '..', 'app', 'controllers', 'concerns', 'colorgy_devise_sso_manager'), __FILE__) if defined? Devise && defined? ActiveSupport::Concern
@@ -5,7 +5,7 @@ require 'omniauth/colorgy_oauth2/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "omniauth-colorgy-oauth2"
8
- spec.version = OmniAuth::ColorgyOauth2::VERSION
8
+ spec.version = OmniAuth::ColorgyOAuth2::VERSION
9
9
  spec.authors = ["Neson"]
10
10
  spec.email = ["neson@dex.tw"]
11
11
 
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_runtime_dependency 'omniauth', '>= 1.1.1'
31
31
  spec.add_runtime_dependency 'omniauth-oauth2', '>= 1.1.1'
32
+ spec.add_runtime_dependency 'jwt', '>= 1.0.0'
32
33
  spec.add_development_dependency "bundler"
33
34
  spec.add_development_dependency "rake"
34
35
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-colorgy-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neson
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.1.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: jwt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -95,10 +109,10 @@ files:
95
109
  - LICENSE.txt
96
110
  - README.md
97
111
  - Rakefile
112
+ - app/controllers/concerns/colorgy_devise_sso_manager.rb
113
+ - app/controllers/concerns/flash_message_reporter.rb
98
114
  - bin/console
99
115
  - bin/setup
100
- - lib/colorgy_devise_sso_manager.rb
101
- - lib/flash_message_reporter.rb
102
116
  - lib/omniauth-colorgy-oauth2.rb
103
117
  - lib/omniauth/colorgy_oauth2.rb
104
118
  - lib/omniauth/colorgy_oauth2/version.rb