AWS QuickSight rails 集成授权代码错误
AWS QuickSight rails integration authorization code error
我有一个 rails 应用程序需要添加 QuickSight。发现为了这些目的有必要使用 get_dashboard_embed_url
方法。此方法 returns 我 URL,但遵循它(手动,通过 iframe 标记)我得到此错误文本
嵌入失败,因为 URL 或授权码无效。这两个都必须有效并且授权码不能过期才能嵌入工作。
我在哪里可以找到验证码?我怎么才能得到它?谢谢你的帮助
这就是我获取 url
的方式
credential_options = {
client: Aws::STS::Client.new(region: ENV['AWS_REGION']),
role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
role_session_name: self.user_email
}
assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
qs_client = Aws::QuickSight::Client.new({
credentials: assume_role_credential,
region: ENV['AWS_REGION']
})
begin
qs_client.register_user({
identity_type: 'IAM', # accepts IAM, QUICKSIGHT
email: self.user_email,
user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
session_name: self.user,
aws_account_id: ENV['AWS_ACCOUNT_ID'],
namespace: 'default'
})
rescue
end
options = {
aws_account_id: ENV['AWS_ACCOUNT_ID'],
dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
identity_type: 'IAM',
session_lifetime_in_minutes: 300,
undo_redo_disabled: false,
reset_disabled: false
}
qs_client.get_dashboard_embed_url(options, {}).embed_url
以及我如何尝试显示
iframe src=@url class='w-100 h-100' style='min-height: 500px;'
首先,抱歉我的英语不好,但我希望你能明白我的意思
好的,完成这些要点后,一切都开始为我工作。另请阅读“Underwater rocks”,这是非常重要的要点列表,可以为您节省大量时间
用这个替换我有问题的代码
def fetch_url # this method fetch embed dashboard url
credential_options = {
client: Aws::STS::Client.new(
region: ENV['AWS_REGION'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
),
role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
role_session_name: self.user_email # This is attr_accessor :user_email
}
assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
qs_client = Aws::QuickSight::Client.new({
credentials: assume_role_credential,
region: ENV['AWS_REGION']
})
begin
qs_client.register_user({
identity_type: 'IAM', # accepts IAM, QUICKSIGHT
email: self.user_email,
user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
session_name: self.user_email,
aws_account_id: 'ENV['AWS_ACCOUNT_ID']',
namespace: 'default'
})
rescue
end
options = {
aws_account_id: ENV['AWS_ACCOUNT_ID'],
dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
identity_type: 'IAM',
session_lifetime_in_minutes: 300,
undo_redo_disabled: false,
reset_disabled: false
}
qs_client.get_dashboard_embed_url(options).embed_url
end
转到管理 QuickSight 面板 https://your-quicksight-region(us-east-2 for example).quicksight.aws.amazon.com/sn/admin#users
并单击“管理权限”按钮(按钮位于 table与用户)
在新页面上单击“创建”按钮和 select“共享仪表板”复选框。设置权限名称,点击“创建”按钮
在您的控制器操作中:@url = fetch_url # fetch_url - method from 1 point
添加到您的视图:iframe src=@url
或 您可以使用 amazon-quicksight-embedding-sdk 但对我来说 iframe 工作得很好
水下岩石
请记住,仪表板 url(您使用此方法 qs_client.get_dashboard_embed_url(options).embed_url
获得)只能使用一次,即您不能使用相同的方式打开两个浏览器选项卡URL。当您将此 URL 传递给 iframe
时,此 URL 将停止工作,您将无法再在其他浏览器 windows 或其他 iframe
的
将您的应用域添加到 QuickSight 上的白名单域。您可以在“管理 QuickSight”面板中执行此操作 https://your-quicksight-region.quicksight.aws.amazon.com/sn/admin#embedding
!!!重要!!! 如果您尝试将仪表板嵌入到您的 localhost:your_server_port_number
rails 服务器,那么您总是会在 iframe
中收到错误消息(但如果您通过浏览器的地址栏转到此 URL,那么您应该会看到您的仪表板(注释掉/删除 iframe
所以它不使用 link,因为每个 嵌入式仪表板 url 都是一次性的))。这是因为白名单中没有提供 localhost:your_server_port_number
(Underwater rocks p.2)。要解决此问题并测试您的工作,您可以使用 ngrok(我不确定它是否仅适用于 macOS)。
当你下载 ngrok
打开你的终端和 运行 命令
$ ./path_to_ngrok_script/./ngrok http your_server_port_number
对我来说是:
$ ~/./scripts/ngrok http 3000
之后执行以下 3 项操作,将您的工作站添加到 QuickSight 白名单:
在带有 ngrok
的终端中复制生成的以开头的域
https
(我将其命名为 ngrok_domain),不适用于 HTTP。为了
示例:https://047956358355.ngrok.io
转到 Underwater rocks p.2 并添加 ngrok_domain
打开浏览器并转到带有 iframe
的路径,但使用 ngrok_domain 而不是 localhost:3000。例如,您的嵌入式仪表板路径是 localhost:3000/embed_dashboard
。将其更改为 https://047956358355.ngrok.io/embed_dashboard
在所有这些步骤之后,一切都开始为我工作。我敢肯定这里的一些要点是多余的,但我真的厌倦了使用这种集成,所以在这里你自己决定应该留下什么,应该删除什么。
我希望我的回答至少对某人有所帮助
我有一个 rails 应用程序需要添加 QuickSight。发现为了这些目的有必要使用 get_dashboard_embed_url
方法。此方法 returns 我 URL,但遵循它(手动,通过 iframe 标记)我得到此错误文本
嵌入失败,因为 URL 或授权码无效。这两个都必须有效并且授权码不能过期才能嵌入工作。
我在哪里可以找到验证码?我怎么才能得到它?谢谢你的帮助
这就是我获取 url
credential_options = {
client: Aws::STS::Client.new(region: ENV['AWS_REGION']),
role_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
role_session_name: self.user_email
}
assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options)
qs_client = Aws::QuickSight::Client.new({
credentials: assume_role_credential,
region: ENV['AWS_REGION']
})
begin
qs_client.register_user({
identity_type: 'IAM', # accepts IAM, QUICKSIGHT
email: self.user_email,
user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER
iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'],
session_name: self.user,
aws_account_id: ENV['AWS_ACCOUNT_ID'],
namespace: 'default'
})
rescue
end
options = {
aws_account_id: ENV['AWS_ACCOUNT_ID'],
dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'],
identity_type: 'IAM',
session_lifetime_in_minutes: 300,
undo_redo_disabled: false,
reset_disabled: false
}
qs_client.get_dashboard_embed_url(options, {}).embed_url
以及我如何尝试显示
iframe src=@url class='w-100 h-100' style='min-height: 500px;'
首先,抱歉我的英语不好,但我希望你能明白我的意思
好的,完成这些要点后,一切都开始为我工作。另请阅读“Underwater rocks”,这是非常重要的要点列表,可以为您节省大量时间
用这个替换我有问题的代码
def fetch_url # this method fetch embed dashboard url credential_options = { client: Aws::STS::Client.new( region: ENV['AWS_REGION'], access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] ), role_arn: ENV['QUICK_SIGHT_ROLE_ARN'], role_session_name: self.user_email # This is attr_accessor :user_email } assume_role_credential = Aws::AssumeRoleCredentials.new(credential_options) qs_client = Aws::QuickSight::Client.new({ credentials: assume_role_credential, region: ENV['AWS_REGION'] }) begin qs_client.register_user({ identity_type: 'IAM', # accepts IAM, QUICKSIGHT email: self.user_email, user_role: 'READER', # accepts ADMIN, AUTHOR, READER, RESTRICTED_AUTHOR, RESTRICTED_READER iam_arn: ENV['QUICK_SIGHT_ROLE_ARN'], session_name: self.user_email, aws_account_id: 'ENV['AWS_ACCOUNT_ID']', namespace: 'default' }) rescue end options = { aws_account_id: ENV['AWS_ACCOUNT_ID'], dashboard_id: ENV['QUICK_SIGHT_DASHBOARD_ID'], identity_type: 'IAM', session_lifetime_in_minutes: 300, undo_redo_disabled: false, reset_disabled: false } qs_client.get_dashboard_embed_url(options).embed_url end
转到管理 QuickSight 面板
https://your-quicksight-region(us-east-2 for example).quicksight.aws.amazon.com/sn/admin#users
并单击“管理权限”按钮(按钮位于 table与用户)在新页面上单击“创建”按钮和 select“共享仪表板”复选框。设置权限名称,点击“创建”按钮
在您的控制器操作中:
@url = fetch_url # fetch_url - method from 1 point
添加到您的视图:
iframe src=@url
或 您可以使用 amazon-quicksight-embedding-sdk 但对我来说 iframe 工作得很好
水下岩石
请记住,仪表板 url(您使用此方法
qs_client.get_dashboard_embed_url(options).embed_url
获得)只能使用一次,即您不能使用相同的方式打开两个浏览器选项卡URL。当您将此 URL 传递给iframe
时,此 URL 将停止工作,您将无法再在其他浏览器 windows 或其他iframe
的将您的应用域添加到 QuickSight 上的白名单域。您可以在“管理 QuickSight”面板中执行此操作
https://your-quicksight-region.quicksight.aws.amazon.com/sn/admin#embedding
!!!重要!!! 如果您尝试将仪表板嵌入到您的
localhost:your_server_port_number
rails 服务器,那么您总是会在iframe
中收到错误消息(但如果您通过浏览器的地址栏转到此 URL,那么您应该会看到您的仪表板(注释掉/删除iframe
所以它不使用 link,因为每个 嵌入式仪表板 url 都是一次性的))。这是因为白名单中没有提供localhost:your_server_port_number
(Underwater rocks p.2)。要解决此问题并测试您的工作,您可以使用 ngrok(我不确定它是否仅适用于 macOS)。
当你下载ngrok
打开你的终端和 运行 命令
$ ./path_to_ngrok_script/./ngrok http your_server_port_number
对我来说是:
$ ~/./scripts/ngrok http 3000
之后执行以下 3 项操作,将您的工作站添加到 QuickSight 白名单:在带有
ngrok
的终端中复制生成的以开头的域https
(我将其命名为 ngrok_domain),不适用于 HTTP。为了 示例:https://047956358355.ngrok.io转到 Underwater rocks p.2 并添加 ngrok_domain
打开浏览器并转到带有
iframe
的路径,但使用 ngrok_domain 而不是 localhost:3000。例如,您的嵌入式仪表板路径是localhost:3000/embed_dashboard
。将其更改为https://047956358355.ngrok.io/embed_dashboard
在所有这些步骤之后,一切都开始为我工作。我敢肯定这里的一些要点是多余的,但我真的厌倦了使用这种集成,所以在这里你自己决定应该留下什么,应该删除什么。
我希望我的回答至少对某人有所帮助