I have a rails app with devise configured and mongodb database. I want to configure Microsoft azure AD for authentication. When the user enters my project url and the user is not signed in, it should redirect to azure AD's sign in page and when the credentials are correct, it should redirect back to my application. I followed this blog to achieve my requirement. But it is throwing random errors. Can someone suggest me on how to do it?
Asked
Active
Viewed 1,516 times
2
-
issue resolve or not ? – Bodh1004 May 28 '19 at 07:17
1 Answers
1
class Integrations::Crm::MsDynamics
extend ActiveSupport::Concern
#to instantiate a new dynamics link directory_id/tenant_id,client_id/application_id,secret,username,password and resource link eg. https://maropost.crm3.dynamics.com
def initialize(tenant_id,client_id,client_secret,username,password,resource)
@tenant_id=tenant_id
@client_id=client_id
@client_secret=client_secret
@username=username
@password=password
@resource=resource
end
def get_token
uri = URI.parse("https://login.microsoftonline.com/#{@tenant_id}/oauth2/token")
request = Net::HTTP::Post.new(uri)
request.content_type = "application/x-www-form-urlencoded"
request["Cache-Control"] = "no-cache"
request.set_form_data(
"client_id" => "#{@client_id}",
"resource" => "#{@resource}",
"username" => "#{@username}",
"password" => "#{@password}",
"grant_type" => "password",
"client_secret" => "#{@client_secret}",
)
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
return response
end
def get_access_token(code)
uri = URI.parse("https://login.microsoftonline.com/#{@tenant_id}/oauth2/token")
request = Net::HTTP::Post.new(uri)
request.content_type = "application/x-www-form-urlencoded"
request["Cache-Control"] = "no-cache"
request.set_form_data(
"client_id" => "#{@client_id}",
"client_secret" => "#{@client_secret}",
"code" => "#{code}",
"grant_type" => "authorization_code",
"redirect_uri" => "#{SSL_APP_SITE}/dynamic_crms_callbacks/dynamic_authorization_code",
"resource" => "#{@resource}",
)
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
return response
end
def ms_dynamics(response)
obj = JSON.parse(response.body)
client = MSDynamics.new({
hostname: "#{@resource}",
access_token: obj["access_token"],
refresh_token: obj["refresh_token"],
client_id: "#{@client_id}",
client_secret: "#{@client_secret}"
})
return client
end
end
Please refer this code it will solve your problem .

Bodh1004
- 309
- 3
- 9