我有一个带有设计配置和 mongodb 数据库的 rails 应用程序。我想配置 Microsoft azure AD 进行身份验证。当用户输入我的项目 url 并且用户未登录时,它应该重定向到 azure AD 的登录页面,并且当凭据正确时,它应该重定向回我的应用程序。我按照这个博客来实现我的要求。但它会引发随机错误。有人可以建议我怎么做吗?
问问题
1142 次
1 回答
4
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
请参考此代码,它将解决您的问题。
于 2019-05-23T08:21:14.300 回答