/
omniauth-microsoft365.rb
49 lines (37 loc) · 1.24 KB
/
omniauth-microsoft365.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# frozen_string_literal: true
require "omniauth/strategies/oauth2"
module OmniAuth
module Strategies
class MicrosoftOffice365 < OmniAuth::Strategies::OAuth2
option :name, :microsoft_office365
DEFAULT_SCOPE = "openid email profile https://graph.microsoft.com/User.Read"
option :client_options,
site: "https://login.microsoftonline.com",
authorize_url: "/common/oauth2/v2.0/authorize",
token_url: "/common/oauth2/v2.0/token"
option :authorize_options, [:scope]
uid { raw_info["id"] }
info do
{
name: raw_info["displayName"] || raw_info["userPrincipalName"],
email: raw_info["mail"] || raw_info["userPrincipalName"],
}
end
extra { { "raw_info" => raw_info } }
def raw_info
@raw_info ||= access_token.get("https://graph.microsoft.com/v1.0/me").parsed
end
def authorize_params
super.tap do |params|
%w[display score auth_type].each do |v|
params[v.to_sym] = request.params[v] if request.params[v]
end
params[:scope] ||= DEFAULT_SCOPE
end
end
def callback_url
full_host + script_name + callback_path
end
end
end
end