保护匿名令牌
安全的匿名令牌(SAT)可以使用户可以进行身份验证以及使用框架的会话API。这些令牌是由安全的API调用生成的,允许管理员为其用户提供按需访问框架资源的访问,而无需提示另一组凭据。例如,在许多用例中,这种类型的身份验证可能是有用的,例如软件试验,演示或信息亭体验。
此外,可以使用其他参数自定义SAT,包括可以在远程VM中提供的数据。
概述
使用SAT API,Web服务器可以请求令牌按需(例如,当请求页面或端点时)并将其提供给定制会话的框架API,或将令牌传递给我们的一个Launchpad,Launch或PWA链接立即记录您的用户。
入门
要求
- 框架管理访问(客户,组织或帐户级别)。
- 启用管理API访问。
- 使用启动板用户启用了匿名令牌提供商。
- Web服务器托管安全的匿名令牌API集成。
REST API凭据
可以在休息端点上消耗安全的匿名令牌API以检索令牌。这需要与适当的角色/权限进行API集成。
创建新的API集成
要开始,请确保登录以管理员的限制,以访问API设置。
有两种开始此过程的方法:
A。从帐户的仪表板中,导航到用户页。
b。如果从管理员视图开始,请导航到要更新的实体(客户,组织或帐户),然后单击其旁边列出的省略号以选择用户。
启用“ API”切换并保存 - 一个新的API选项卡将出现。
单击API选项卡,然后单击添加API关联。
给这个新的API集成一个名称;对于此示例,我们将使用“ API创建匿名令牌”。然后,根据下面的情况选择角色和范围。
对于帐户级集成,请选择
API-生成匿名帐户令牌
角色,以及您正在配置访问权限的帐户。对于组织或客户级集成,您需要指定
API-生成匿名组织令牌
和API-生成匿名客户令牌
, 分别。
点击添加。新的API将显示在API列表中。单击新API的选项菜单,然后选择管理凭据。
提示您创建一个新的API键 - 首先给它一个名称,然后单击右侧的“加号”按钮。
现在,您将看到客户ID和客户端秘密。将这些值复制到安全的地方,因为离开此屏幕后您将无法再次看到秘密。
就是这样!现在,您准备在下一部分中添加SAT提供商。
创建安全的匿名令牌提供商
有两种开始此过程的方法:
A。从帐户的仪表板中,导航到“用户”页面,您将在其中降落在该页面上验证标签。
b。如果您是从管理员视图开始的,请导航到实体(客户,组织或帐户),然后单击其旁边列出的省略号以选择用户。
在身份验证下启用安全的匿名选项并保存;一个新确保匿名标签将显示。
单击安全的匿名选项卡,然后单击添加提供商按钮右上角。
提示您描述和配置新的安全匿名提供商。您可以指定以下内容:
属性名称 描述 描述 简短的描述您打算使用匿名令牌提供商(例如,公共审判) 令牌持续时间 代币到期多久,并且不再有效。 角色和范围 该角色通常是启动板用户,范围是哪个帐户/启动板 给它一个描述,对您的用例有意义,例如“产品试验的代币提供商”。然后,设置您想要的令牌持续时间。最后,选择角色和范围 - 我们建议出于安全原因仅配置启动板用户的角色。
您的新匿名访问提供商将出现。单击提供商旁边的省略号,然后选择“游乐场”。使用新提供商的测试生成令牌以及各种语法示例,演示了如何提出令牌请求。
生成安全的匿名令牌
现在,我们可以从上面的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)
打印((r。JSON(())
匿名令牌参数
您可以提供一些选修的生成匿名令牌时的参数。这些参数可让您自定义JWT中提供的信息,使您可以设置诸如:
可选的匿名令牌参数
姓名 | 类型 | 描述 | 必需的 |
---|---|---|---|
名 | 细绳 | 例如,“约翰”。 | 错误的 |
姓 | 细绳 | 例如,“史密斯”。 | 错误的 |
电子邮件 | 细绳 | 例子:john.smith@acme.com | 错误的 |
email_domain | 细绳 | 示例:acme.com。这将返回xxxxxxx@acme.com。 | 错误的 |
元数据 | 目的 | 一个包含您要为用户/令牌提供的任何其他信息的对象。 | 错误的 |
如果提供,帧将使用上述信息进行用户活动,会话跟踪和审核跟踪报告。
使用SATS与Launchpad或启动链接
管理员可以将用户重定向到使用令牌作为查询参数。例如,假设我们有以下启动板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”,,,,
元数据:{
示例ID:123456,,,,
语言:“ 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_url
和frame_logout_url
。当存在这些时,我们将尊重用户使用UI时提供的价值。
当启动板和启动链接用户不活动(无键盘或鼠标活动)15分钟时,使用这些URL。发生这种情况时,我们将用户注销并提示用户使用选项离开或者登录,这样:
此外,使用启动板时,注销URL与启动板右上角的配置文件菜单上的“注销”按钮绑定。当用户单击此时,框架使用户的令牌无效,并将用户的浏览器重定向到SAT元数据中指定的URL。
为了确保获得丰富的体验,URL为frame_login_url
应使用将用户路由到您的网站以生成新令牌,然后重定向用户回到他们的原始位置有那个象征。这样可以确保在使用安全匿名令牌的同时,启动板,启动链接和PWA之间的兼容性。
如果SAML2用户在其身份提供商的主张/索赔中指定这些参数,也可以利用这些自定义授权。每个身份提供者的过程各不相同;请参阅您的身份提供者有关添加自定义主张/索赔的文档。
元数据
生成安全的匿名令牌时,您可以为用户提供自定义信息 - 这种类型的元数据通常称为断言。一个简单的node.js示例可在github这说明了如何在产生令牌后填充元数据并查询它。我们将在下面的示例中使用此存储库中的代码片段。
人口元数据
请求令牌时,您可以向请求正文提供元数据对象。
{
名:“杰森”,,,,
姓:“汤普森”,,,,
电子邮件:“ jason.123456@acme.com”,,,,
元数据:{
示例ID:123456,,,,
语言:“ 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的顶部单击其名称以打开其用户菜单。从那里单击轮廓这将带您进入用户的个人资料页面 - 从那里,单击先进的在左手侧。此页面显示了当前用户的主张表,例如: