跳过主要内容

保护匿名令牌

安全的匿名令牌(SAT)可以使用户可以进行身份​​验证以及使用框架的会话API。这些令牌是由安全的API调用生成的,允许管理员为其用户提供按需访问框架资源的访问,而无需提示另一组凭据。例如,在许多用例中,这种类型的身份验证可能是有用的,例如软件试验,演示或信息亭体验。

此外,可以使用其他参数自定义SAT,包括可以在远程VM中提供的数据。

概述

使用SAT API,Web服务器可以请求令牌按需(例如,当请求页面或端点时)并将其提供给定制会话的框架API,或将令牌传递给我们的一个Launchpad,Launch或PWA链接立即记录您的用户。

入门

要求

  • 框架管理访问(客户,组织或帐户级别)。
  • 启用管理API访问。
  • 使用启动板用户启用了匿名令牌提供商。
  • Web服务器托管安全的匿名令牌API集成。

REST API凭据

可以在休息端点上消耗安全的匿名令牌API以检索令牌。这需要与适当的角色/权限进行API集成。

创建新的API集成

要开始,请确保登录以管理员的限制,以访问API设置。

  1. 有两种开始此过程的方法:

    A。从帐户的仪表板中,导航到用户页。

    b。如果从管理员视图开始,请导航到要更新的实体(客户,组织或帐户),然后单击其旁边列出的省略号以选择用户

  1. 启用“ API”切换并保存 - 一个新的API选项卡将出现。

  2. 单击API选项卡,然后单击添加API关联。

  3. 给这个新的API集成一个名称;对于此示例,我们将使用“ API创建匿名令牌”。然后,根据下面的情况选择角色和范围。

    对于帐户级集成,请选择API-生成匿名帐户令牌角色,以及您正在配置访问权限的帐户。

    对于组织或客户级集成,您需要指定API-生成匿名组织令牌API-生成匿名客户令牌, 分别。

  1. 点击添加。新的API将显示在API列表中。单击新API的选项菜单,然后选择管理凭据

  2. 提示您创建一个新的API键 - 首先给它一个名称,然后单击右侧的“加号”按钮。

  3. 现在,您将看到客户ID和客户端秘密。将这些值复制到安全的地方,因为离开此屏幕后您将无法再次看到秘密。

  4. 就是这样!现在,您准备在下一部分中添加SAT提供商。

创建安全的匿名令牌提供商

  1. 有两种开始此过程的方法:

    A。从帐户的仪表板中,导航到“用户”页面,您将在其中降落在该页面上验证标签。

    b。如果您是从管理员视图开始的,请导航到实体(客​​户,组织或帐户),然后单击其旁边列出的省略号以选择用户

  2. 在身份验证下启用安全的匿名选项并保存;一个新确保匿名标签将显示。

  3. 单击安全的匿名选项卡,然后单击添加提供商按钮右上角。

  4. 提示您描述和配置新的安全匿名提供商。您可以指定以下内容:

    属性名称 描述
    描述 简短的描述您打算使用匿名令牌提供商(例如,公共审判)
    令牌持续时间 代币到期多久,并且不再有效。
    角色和范围 该角色通常是启动板用户,范围是哪个帐户/启动板
  5. 给它一个描述,对您的用例有意义,例如“产品试验的代币提供商”。然后,设置您想要的令牌持续时间。最后,选择角色和范围 - 我们建议出于安全原因仅配置启动板用户的角色。

  6. 您的新匿名访问提供商将出现。单击提供商旁边的省略号,然后选择“游乐场”。使用新提供商的测试生成令牌以及各种语法示例,演示了如何提出令牌请求。

生成安全的匿名令牌

现在,我们可以从上面的API设置步骤中使用API​​客户端ID和客户端秘密,我们可以使用安全的匿名游乐场中提供的动态代码段示例。提出令牌请求非常简单。它需要API凭据,根据这些凭据进行HMAC签名,然后在您的SAT提供商的端点上进行HTTP帖子。

安全考虑

SAT的请求应从安全的后端环境中执行。例如,这样的请求不应由客户端的JavaScript提出,因为可以向公众展示API凭据。

警告

您有责任确保处理SAT请求的任何自托管端点。为了澄清,网络上不应有一个公共网址,它将向任何访问者打印出免费令牌 - 避免这种情况并使用最佳实践将有助于防止未经授权的访问,滥用资源,法律问题或更糟。

代码示例

在安全的匿名游乐场中,我们有一个示例用于要求写入的令牌Python 3,,,,node.js,,,,卷曲,,,,电源外壳, 和php。要自己尝试这些,请复制一个首选语言的示例,然后粘贴在客户ID和客户端秘密中,然后执行代码。执行示例,如果正确配置了所有内容,则应返回令牌。

这是一个示例,在Python 3中打印SAT请求的输出:

#!/bin/env Python

进口哈希布
进口HMAC
进口时间
进口要求
进口基础64

#客户凭证
client_id=“ <您的API客户端ID进入这里>”
client_secret=B“ <您的API客户秘密去这里>”

#创建签名
时间戳=int((时间时间((
签署=“%s%s”((时间戳,,,,client_id
签名=HMAC新的((client_secret,,,,签署编码(('utf-8',,,,哈希布SHA256十六世((

#准备HTTP请求标头
标题={“ X-Frame-Clientid”client_id,,,,“ X框架Timestamp”str((时间戳,,,,“ X框架”签名}

#包括可选参数,例如first_name,last_name,email_domain,电子邮件或元数据。
身体={
“名”“约翰”,,,,
“姓”“应用”,,,,
“电子邮件”“ john@example.com”,,,,
“元数据”{
“数据”“最喜欢的食物:苹果”
}
}

#提出请求
r=要求邮政((“ https://api.console.nutanix.com/v1/< entity类型此处(客户,组织或帐户)>//secure-anonymous//tokens“,,,,标题=标题,,,,JSON=身体

#打印响应(JWT)
打印((rJSON((

匿名令牌参数

您可以提供一些选修的生成匿名令牌时的参数。这些参数可让您自定义JWT中提供的信息,使您可以设置诸如:

可选的匿名令牌参数

姓名 类型 描述 必需的
细绳 例如,“约翰”。 错误的
细绳 例如,“史密斯”。 错误的
电子邮件 细绳 例子:john.smith@acme.com 错误的
email_domain 细绳 示例:acme.com。这将返回xxxxxxx@acme.com 错误的
元数据 目的 一个包含您要为用户/令牌提供的任何其他信息的对象。 错误的

如果提供,帧将使用上述信息进行用户活动,会话跟踪和审核跟踪报告。

管理员可以将用户重定向到使用令牌作为查询参数。例如,假设我们有以下启动板URL:

https://console.nutanix.com/acme/projects/demos/launchpad/demo-apps

考虑到该URL,让我们假设我们已经从SAT API中获得了令牌。我们将令牌作为URL搜索查询参数:

?token = your_generated_token_here

结果:

https://console.nutanix.com/acme/projects/demos/launchpad/demo-apps?token=your_generated_token_here

并且,如果启动链接URL,则类似:

https://frame.nutanix.com/launch?terminalConfigId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&appId=desktop

附加?token = generated_token_here结果是:

https://frame.nutanix.com/launch?terminalconfigid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xultion _ genork = generer =

使用URL附加了令牌,当用户进入URL时,帧会从URL中消耗令牌并自动将用户登录。这样的URL可以以多种不同的方式传递给用户:

  • 您网站上的链接(也许在新选项卡中打开链接)。
  • 作为用户工作流的一部分,将这些URL重定向到这些URL(例如example.com/sign-in-->从API产生令牌 ->重定向用户框架URL)
  • 发送链接作为电子邮件发送 - 请确保令牌的到期持续时间有意义,对于安全性而言,它们的生成时刻开始到期。
笔记

为了确保良好的用户体验,请确保生成的令牌具有适当的角色/权限,以访问您指向用户的启动板或资源。

自定义验证流

使用SATS与Launchpad或启动链接时,特定的元数据应指定要指出客户构建和客户托管的URL,以控制用户注销或从Frame UIS中登录时会发生什么。

{
“杰森”,,,,
“汤普森”,,,,
电子邮件“ jason.123456@acme.com”,,,,
元数据{
示例ID123456,,,,
语言“ en”,,,,
时区“ pt”,,,,
最喜欢的食品“炸玉米饼”,,,,
frame_login_url“ https://example.com/log-back-into-frame”,,,,
frame_logout_url“ https://example.com/log-out-and-thank-you”
}
}

在上面的示例中,我们指定了frame_login_urlframe_logout_url。当存在这些时,我们将尊重用户使用UI时提供的价值。

当启动板和启动链接用户不活动(无键盘或鼠标活动)15分钟时,使用这些URL。发生这种情况时,我们将用户注销并提示用户使用选项离开或者登录,这样:

此外,使用启动板时,注销URL与启动板右上角的配置文件菜单上的“注销”按钮绑定。当用户单击此时,框架使用户的令牌无效,并将用户的浏览器重定向到SAT元数据中指定的URL。

提示

为了确保获得丰富的体验,URL为frame_login_url应使用将用户路由到您的网站以生成新令牌,然后重定向用户回到他们的原始位置有那个象征。这样可以确保在使用安全匿名令牌的同时,启动板,启动链接和PWA之间的兼容性。

提示

如果SAML2用户在其身份提供商的主张/索赔中指定这些参数,也可以利用这些自定义授权。每个身份提供者的过程各不相同;请参阅您的身份提供者有关添加自定义主张/索赔的文档。

元数据

生成安全的匿名令牌时,您可以为用户提供自定义信息 - 这种类型的元数据通常称为断言。一个简单的node.js示例可在github这说明了如何在产生令牌后填充元数据并查询它。我们将在下面的示例中使用此存储库中的代码片段。

人口元数据

请求令牌时,您可以向请求正文提供元数据对象。

{
“杰森”,,,,
“汤普森”,,,,
电子邮件“ jason.123456@acme.com”,,,,
元数据{
示例ID123456,,,,
语言“ en”,,,,
时区“ pt”,,,,
最喜欢的食品“炸玉米饼”
}
}

查询元数据

查询元数据是一个简单的GET请求,以及指定令牌的授权标题。代币必须以“携带者”格式指定,并且API端点为https://cpanel-backend-prod.frame.nutanix.com/api/rest/v1/me/assertions

异步功能getUserAssertions((令牌{
const结果=等待(({
URL
“ https://cpanel-backend-prod.frame.nutanix.com/api/rest/v1/me/assertions”,,,,
标题{授权`承载者$ {令牌}`},,,,
};
返回结果数据;
}

从窗户内检索元数据

在运行会话期间,也可以从远程操作系统环境中检索此元数据。通过使用会话令牌它可以作为环境变量标记为frame_session_token。此会话令牌与用于启动会话的令牌不同(并且不能用于开始会话),但它与同一用户有关。该令牌还需要不同的终点来查询断言。这是一个如何在PowerShell(5.x)中执行此操作的示例:

#设置PowerShell 5.x的TLS兼容性
[Net.ServicePointManager]:: SecurityProtocol =[net.securityprotocolytype]:: TLS-bor[net.securityprotocolytype]:: TLS11-bor[net.securityprotocolytype]:: TLS12

$ sessiontoken=$ env:frame_session_token”
$ URI='https://messaging.frame.nutanix.com/api/rest/v1/me/assertions'
$标题= @{'授权'=“持有人$ sessiontoken}

$响应=Invoke-Restmethod-Uri$ URI-标题$标题-内容类型“应用程序/JSON”-方法获取

写宿主$响应
笔记

您可以在“前”脚本中查询这样的元数据,并使用所提供的信息自定义您的应用程序/环境,安装网络驱动器等。请参阅脚本文档有关更多详细信息。

从Launchpad查看元数据

任何人都可以从“帐户配置文件”页面从启动板查看其元数据。要查看所提供的元数据或“断言”,用户可以在Launchpad的顶部单击其名称以打开其用户菜单。从那里单击轮廓这将带您进入用户的个人资料页面 - 从那里,单击先进的在左手侧。此页面显示了当前用户的主张表,例如:

Baidu