2

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?

poombavai
  • 111
  • 11

1 Answers1

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