云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

_服务器代维_0元

小七 141 0

2米使用机器对机器(M2M)授权如何使用客户端凭据grant和Auth0设置非交互式应用程序以执行IoT设备、CLI工具和更多机器到机器的API授权。

很多时候,自治系统的不同部分之间需要一个安全的、授权的通信信道。想象一下来自不同公司的两个后端服务通过互联网进行通信。对于这些情况,OAuth 2.0提供了客户端凭据授予流。在这篇文章中,我们将研究如何将oauth2.0授予的客户端凭据与Auth0一起用于机器到机器(M2M)通信。"学习使用Auth0进行机器对机器的授权!"在推特上留言获取本文中示例的代码。机器对机器通信在系统的许多部分,机器对机器的通信是有意义的:服务到服务,守护程序到后端,CLI客户端到内部服务,物联网工具。这些通信的关键方面在于,在系统中建立信任的要素是客户端。这是什么意思?与通常的系统不同,授权过程试图通过授权用户来建立信任,在这种情况下,必须授权和信任的是客户端。换句话说,用户不需要与系统交互来进行身份验证,而是系统必须对客户端进行身份验证和授权。简单地说,在这种情况下,客户机甚至是一个自主的进程。对于这些场景,诸如用户名+密码、社交登录等典型的身份验证方案没有意义。OAuth 2.0中的[client credentials grant]试图满足这些场景的需要。在客户机凭证授权中,客户机持有两条信息:客户机ID和客户机机密。有了这些信息,客户端可以请求受保护资源的访问令牌。客户机和另一个客户机向客户机声明一个秘密,并向另一个客户机声明一个秘密。授权服务器验证请求,如果成功,则发送带有访问令牌的响应。客户端现在可以使用访问令牌从资源服务器请求受保护的资源。由于客户机必须始终持有客户机机密,此授权仅用于受信任的客户机。换言之,持有客户机密的客户机必须始终用于不存在该机密被滥用风险的地方。例如,虽然在一个内部守护进程中使用客户端凭据授权是一个好主意,该守护进程通过web向系统的不同部分发送报告,但它不能用于任何外部用户都可以从GitHub下载的公共工具。客户端凭据授予客户端凭据授予非常简单。以下是相关的HTTP请求:发布https:///oauth/token内容类型:application/json{"受众":"","grant_-type":"客户端_凭据","client_id":"","客户机密钥":""}成功的授权请求会导致如下响应:HTTP/1.1 200行内容类型:application/json{"access_token":"eyJz93a…k4laUWw","token_type":"承载","到期日":86400}在Auth0中,要使用客户端凭据授予,可以从仪表板创建新的"机器到机器"应用程序:机器对机器应用程序要求至少选择一个API。这是通过上面的HTTP请求中的访问群体声明选择的API。您可以在Auth0仪表板的API部分为API和受保护的资源创建访问群体。您可以在应用程序的api选项卡中启用或禁用这些api。Auth0中的细粒度权限由于在Auth0中使用了钩子,所以很容易为机器到机器通信拥有细粒度的权限。使用节点.js代码中,您可以自定义Auth0的操作并扩展Auth0基础平台的功能。"使用Auth0钩子,您可以拥有强大的细粒度权限,即使是机器到机器的授权!"在推特上留言Auth0实用程序(Auth0)是wt cli的一部分。有关wt-cli的更多信息可以在这里找到,配置wt-cli以供使用也可以在这里找到。如果要创建钩子,则CLI进程如下所示:构建Auth0中的示例代码:auth0 scaffold-t预用户注册>文件.js然后创建钩子:auth0 create-t预用户注册--名称my-extension-1-p auth0 default文件.js与此过程一起,Auth0管理仪表板还提供了一个用于管理挂钩的接口。这个仪表板可以执行除"从钩子识别并获取日志数据"之外的任何CLI功能。如果您不需要钩子的灵活性,您仍然可以通过作用域达到一定的粒度级别。这些功能可以在每个API和每个应用程序/客户端的基础上启用。M2M通信的常见用例在本节中,我们将了解M2M通信可能有意义的常见场景。后端到后端(服务/守护程序)这是最常见的情况之一。假设您有不同的内部服务,它们以日志的形式生成数据。这些日志存储在本地仓库中。但是,作为策略的一部分,您还希望将这些日志存储在异地的冷存储解决方案中。您可以通过internet将这些日志发送到另一个云提供商中的冷存储服务。要授权来自网络中不同服务的日志存储,可以使用客户端凭据授予,为每个客户端提供一个客户端ID和一个客户端密码。其他常见服务,如作业调度程序、守护进程、连续进程呢?这些也是机器对机器授权有意义的很好的场景。假设您的网络中有一个作业调度器,但它位于一个为GPU处理提供大量服务的云提供商上。您只希望您的授权客户使用该服务。因此,您使用客户机凭证授权,并且只授权那些您想要允许的客户机id。物联网设备物联网设备的兴起为机器对机器的解决方案提供了一个很好的例子。许多(如果不是大多数)物联网设备都是小型的、自主的专用设备,用于收集数据并将数据发送到服务器。假设你有一组小型物联网设备,用来收集停车场停车数量的数据。您有许多设备不断地向中央服务器报告数据。这些设备通过WiFi进行通信。为了避免入侵,即使您的WiFi网络受密码保护,您也可以使用客户端凭据授予,为每个IoT设备提供自己的客户端ID和客户端密码。这些设备是可信的:你设置它们,其他人不能与它们交互。CLI客户端当系统变得更大时,自动化开始变得越来越有意义。许多重复的任务开始变成脚本,但仍需要管理员监督。这些脚本在管理员需要运行时运行。由于这些脚本与公司架构的敏感部分交互,它们通常具有某种保护。在这些情况下,管理员可以选择创建CLI应用程序,这些应用程序具有执行操作所需的权限,但这些应用程序仅在某些计算机(如自己的计算机)或大型机中可用。在这些情况下,客户机凭证授权也是有意义的。这些CLI应用程序是可信的,但它们还需要访问系统的敏感部分。通过要求客户端ID和客户端机密来保护对系统敏感部分的访问是一种解决方案。代码示例:礼品递送应用程序如果您有兴趣看到可以应用于真实场景的代码,我们有一个用于此目的的示例应用程序。Gift Deliveries应用程序展示了来自同一家公司的两个后端服务如何使用客户端凭据授权安全地交互。使用API来定位另一个API,并使用该API来定位另一个API。这两种服务都在网上商店的内部网络中运行,因此,礼品递送客户机是一个受信任的客户机,它允许它使用客户机凭证授权。如果你看一看礼品配送部/索引.js文件您将看到使用客户端凭据授予获取访问令牌的代码:var getAccessToken=函数(回调){如果(!env('AUTH0_DOMAIN')){callback(new Error('需要AUTH0_域才能获得访问令牌(验证您的配置)。');}logger.debug('Fetching access token from https://'+env('AUTH0_DOMAIN')+'/oauth/token');变量选项={method:'发布',url:'https://'+env('AUTH0_DOMAIN')+'/oauth/token',标题:{'缓存控制':'无缓存',"内容类型":"应用程序/json"},正文:{访问群体:env('RESOURCE_SERVER'),grant_type:'客户端\凭据',client_id:env('AUTH0_client_id'),client_secret:env('AUTH0_client_secret')},json:对};请求(选项、函数(err、res、body){如果(错误| |住宅状态代码=300){返回回调(res&&实体||错误);}回调(null,body.access_令牌);});}如果要运行此应用程序,请注册一个免费的Auth0帐户,克隆存储库并按照自述文件进行操作。结论机器对机器通信几乎是任何现代建筑的一部分。OAuth 2.0和Auth0提供了必要的构建块,使其在您的体系结构中的使用变得轻而易举。从后端到后端、服务、守护程序、物联网设备,甚至是CLI工具,客户端凭证授权仍然是解决自治系统和半自治系统之间授权问题的一种简单而有用的方法。这笔补助金,增加