azuread-auth 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/azure_ad.rb +97 -0
  3. data/test/test_azure_ad.rb +10 -0
  4. metadata +89 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c24b15ae292247171f6bedfa92ddb078676bf7c49ace011fa5ead35c2a7e0c16
4
+ data.tar.gz: 77f6466482553d27a34d3af76ce6293ca4b45e15207e357d8cee34e8c9343428
5
+ SHA512:
6
+ metadata.gz: bd9f6ece6de06348cc541a0eb12afe3fa75c5afeeee9dfc9bb0e1204224bb1c43a5ca1cdfd1f008f6115c6d79b4fd4a9b4bc476121cfa8c44332a57fe6ec4bc3
7
+ data.tar.gz: 0bad5c6ef79ef54940334571b46e04e8a35dbd7d20c4d46243a5591b3d376626fdc1e9ca68b3c1ded866a536371dd4bab3916ef2862922b53dc918cecf527b2f
@@ -0,0 +1,97 @@
1
+ require 'jwt'
2
+
3
+ module AzureADAuth
4
+ # This is the main class responsible to evaluate the equations
5
+ class AzureAD
6
+ VERSION = '0.1.1'.freeze
7
+
8
+ # tenant = "nvsistemas.onmicrosoft.com"
9
+ # app_id = "616f5cbb-b5e8-48b8-90c0-1193606880fc"
10
+ # redirect_url = "http://localhost:3000/mykaefer_oauth"
11
+ # state = "12345"
12
+ # #client_secret = "nahpeukahsh8fi8ifier"
13
+ # client_secret = "cwdbdcej1a+4th5b3xsqj8gqe8shfo+sphkjd88vquo="
14
+ # resource = "http://localhost:3000/mykaefer_oauth"
15
+ def initialize(opts = {})
16
+ @tenant = opts[:tenant]
17
+ @app_id = opts[:app_id]
18
+ @redirect_url = opts[:redirect_url]
19
+ @state = opts[:state]
20
+ @client_secret = opts[:client_secret]
21
+ @resource = opts[:resource]
22
+ end
23
+
24
+ def authorization_url(login)
25
+ "https://login.microsoftonline.com/#{@tenant}/oauth2/authorize?client_id=#{@app_id}&response_type=code&redirect_uri=#{@redirect_url}&response_mode=query&state=#{@state}&login_hint=#{login}"
26
+ end
27
+
28
+ # PARAMS
29
+ #
30
+ # code = params[:code]
31
+ # session_state = params[:session_state]
32
+ # state = params[:state]
33
+ # POST /{tenant}/oauth2/token HTTP/1.1
34
+ # Host: https://login.microsoftonline.com
35
+ # Content-Type: application/x-www-form-urlencoded
36
+ # grant_type=authorization_code
37
+ # &client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
38
+ # &code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMP...
39
+ # &redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F
40
+ # &resource=https%3A%2F%2Fservice.contoso.com%2F
41
+ # &client_secret=p@ssw0rd
42
+ def request_access_token(opts = {})
43
+ code = opts[:code]
44
+ session_state = opts[:session_state]
45
+ state = opts[:state]
46
+
47
+ params = {
48
+ grant_type: 'authorization_code', client_id: @app_id, code: code,
49
+ redirect_uri: @redirect_url, client_secret: @client_secret,
50
+ resource: @app_id
51
+ }
52
+ token_url = "https://login.microsoftonline.com/#{@tenant}/oauth2/token"
53
+
54
+ response = Net::HTTP.post_form(URI.parse(token_url), params)
55
+
56
+ body = JSON.parse(response.body)
57
+
58
+ puts "#" * 90
59
+ ap response.code
60
+ ap body
61
+ puts "#" * 90
62
+
63
+ answer = { status: :failed, data: {} }
64
+
65
+ if response.code == '200'
66
+ access_token = body['access_token']
67
+ token_type = body['token_type']
68
+ expires_in = body['expires_in']
69
+ ext_expires_in = body['ext_expires_in']
70
+ not_before = body['not_before']
71
+ resource = body['resource']
72
+ refresh_token = body['refresh_token']
73
+ id_token = body['id_token']
74
+ jwt_token = JWT.decode(id_token, nil, false)
75
+ scope = body['scope']
76
+ puts "#" * 90
77
+ ap jwt_token
78
+ puts "#" * 90
79
+
80
+ puts "Access Token Acquired"
81
+ answer[:data] = jwt_token[0]
82
+
83
+ if not answer[:data].include?('email') and answer[:data].include?('unique_name')
84
+ answer[:data]['email'] = jwt_token[0]['unique_name']
85
+ end
86
+
87
+ if answer[:data]['email']
88
+ answer[:data]['email'] = answer[:data]['email'].downcase
89
+ answer[:status] = :success
90
+ end
91
+ else
92
+ answer[:msg] = response.body
93
+ end
94
+ return answer
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,10 @@
1
+ require 'minitest/autorun'
2
+ require 'azure_ad'
3
+
4
+ # This class test all possible equations for this gem
5
+ class TestParsec < Minitest::Test
6
+ def test_defined
7
+ assert defined?(AzureADAuth::AzureAD)
8
+ assert defined?(AzureADAuth::AzureAD::VERSION)
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: azuread-auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Nilton Vasques
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.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: 2.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.1.0
55
+ description: AzureAD Authentication
56
+ email:
57
+ - nilton.vasques@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/azure_ad.rb
63
+ - test/test_azure_ad.rb
64
+ homepage: https://github.com/niltonvasques/azuread-auth
65
+ licenses:
66
+ - mit
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.7.6
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: A gem to authenticate against AzureAD
88
+ test_files:
89
+ - test/test_azure_ad.rb