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

金山云_xyz域名注册_限量秒杀

小七 141 0

云计算厂商_网站_云虚拟主机跟云服务器

DR:在本教程中,您将学习如何使用rails6和Auth0来构建一个具有授权和开放端点的API。构建后端服务的生态系统比以往任何时候都更加拥挤。为构建API和后端服务提供了多种选择—从节点.js框架和web应用程序到轻量级的无服务器功能——有时候很容易忽视久经考验的真正的框架,比如RubyonRails,它(截至2020年)已经有15年的历史了!Rails有时会因为不是最新或最闪亮的框架而受到批评。但是Rails继续提供合理的默认设置,为web应用和api快速生成脚手架的能力,以及不断迭代的新特性。在rails6中,这包括对多环境凭证的轻松管理、新的Zeitwork autoloader以及本教程范围之外的许多其他特性。请参阅JWT授权的新身份验证和身份验证教程,云产品,以确保您的系统访问安全。您将构建的API非常简单:您将创建一个端点,用于读取、创建和删除名为Chirps的短消息—将其视为您自己的私有Twitter API。"有了Rails 6和Auth0,启动API和保护端点就很简单了。"在推特上留言您可以在这个GitHub存储库中找到本教程中的所有代码。继续阅读开始吧!先决条件Rails和先决条件。在使用Rails CLI之前,您需要安装Rails本身。如果你已经安装了Ruby,你可以像这样安装Rails:gem install Rails。您还需要Rails的先决条件:Ruby和SQLite3。您可以在rubyonrails指南站点上找到安装Rails的完整说明Auth0帐户。如果你没有,你可以在这里注册一个免费的Auth0帐户。创建新的Auth0 API在跳转到代码之前,您需要创建一个新的auth0api。转到Auth0仪表板的API部分,单击橙色的"createapi"按钮。用以下值填写表单:名称:Rails安全API标识符:https://rails安全api签名算法:RS256(这应该是默认选择)复制标识符值(https://rails安全api)-设置Rails应用程序时需要它。您还需要获取Auth0域。除非您使用的是自定义域,否则此值将为https://[TENANT_NAME].auth0.com/-请确保包含反斜杠!如果不确定此值是什么,请打开API设置中的"Test"选项卡,企业交流软件,并查看代码示例中"Asking Auth0 for tokens from my application"下的url参数:创建完API之后,就可以转到命令行开始构建Rails应用程序了!脚手架生成新Rails应用程序的最直接的方法是使用CLI。在终端中运行以下命令:$rails new auth0_rails_api--api一旦Rails CLI完成,您就可以准备好一个完全运行的Rails应用程序了。要确保这一点,请在命令行中运行以下命令:$cd auth0_rails\u api$bundle exec rails软件包导航到:3000在您的浏览器中;您应该会看到一个标准的"问候"屏幕,指示Rails应用程序正在成功运行:现在已经启动并运行了,是时候开始构建API了。终止正在运行的Rails进程(ctrl+c)并继续阅读!创建授权处理程序在本节中,您将构建一个用于处理jsonwebtoken(JWT)验证的类,以及一个在向API发送新请求时使用JWT类执行授权的服务。首先,您需要将jwt gem添加到您的应用程序中。打开项目根目录中的Gemfile,并将以下行添加到文件中:宝石"jwt"从命令行运行bundle install来安装gem。接下来,您需要将API标识符和域值从Auth0配置添加到Rails环境中。在命令行中,运行以下命令:$bundle exec轨道cr伊甸园:编辑环境发展提示:如果您的命令行中没有设置默认的文本编辑器,淘客吧,您可能需要在命令中传递一个编辑器参数,例如editor="vim"bundle exec rails cr伊甸园:编辑环境发展如果您使用过rails5,那么您可能对rails5.2中加密凭证的引入很熟悉。将--environment development传递到参数中的原因是rails6开发凭证现在支持多个环境!当凭据文件打开时,删除所有现有内容并添加下面的代码段。请确保用您在"创建新的auth0api"部分中复制的AUTH0域值替换{AUTH0_DOMAIN}。如果在该部分中使用了自定义标识符值,则还需要替换api_标识符值。授权0:api_标识符:https://rails安全api域:{AUTH0_domain}保存凭据文件后,在所选的代码编辑器中打开项目目录。在app下创建一个名为lib的目录,并创建一个名为json\u web的新文件_令牌.rb.提示:在app/lib而不是lib中创建新类的原因是默认情况下,app下的子目录是自动加载的。如果您不熟悉使用Zeitwork引擎的rails6自动加载,那么Rails自动加载指南或本文中关于理解rails6中的Zeitwork的文章可以提供更多信息。将以下内容添加到json\u web_令牌.rb:#app/lib/json_网络_令牌.rb需要"net/http"需要"uri"类JsonWebToken定义自我验证(代币)JWT.解码(象征,无,true,#验证此令牌的签名算法:'RS256',国际标准:Rails.application.credentials.auth0[:域],验证是否为真,返利联盟,澳元:Rails.application.credentials.auth0[:api_标识符],verify_aud:true)do |标题|jwks_hash[头['kid']]结束结束定义self.jwks_哈希jwks_raw=净:HTTP.getURI("#{Rails.application.credentials.auth0[:domain]}。众所周知/jwks.json文件")jwks_keys=数组(JSON.parse(jwks_raw)['keys'])散列[jwks U键.地图do | k|[k["孩子"],OpenSSL::X509::证书.新(Base64.decode64(k['x5c'].first)).公钥]结束]结束结束这个类几乎是从auth0railsapi快速启动中逐字获取的。它执行API请求将提供的JWT格式的访问令牌的实际验证。接下来,在app下创建一个名为services的子目录。创建一个名为authorization的新文件_服务.rb并添加以下内容:类授权服务def initialize(headers={})@headers=标题结束def authenticate_请求!验证\u令牌结束私有的def http_令牌如果@headers['Authorization'],是否存在?@标题['Authorization'].split('').last结束结束def verify_令牌JsonWebToken.verify(http令牌)结束结束通过将授权逻辑提取到服务,您将验证JWT的真实性与授权HTTP请求的关注点分开。AuthorizationService在Authorization HTTP头中获取访问令牌,并将其传递给JsonWebToken进行验证。通过这种职责分离,您可以将JWT验证过程未来可能的任何更改限制为JsonWebToken类。有了AuthorizationService,您现在可以轻松地向控制器添加授权检查—您将在下一节中完成此操作!保护API端点建立一个安全控制器的基础此时,您可以开始创建控制器并分别向每个控制器添加授权检查。但是,如果您计划保护整个API,则更容易创建一个基本控制器,您的受保护控制器可以从中继承授权检查。创建一个名为secured的新文件_控制器.rb在"应用程序/控制器"中添加以下内容:类SecuredController,比较便宜的云服务器