API身份验证底漆

尽管几乎所有现代API认证规范都可以分为几种不同的类型,但它们中的每一个都有细微差别。即使是身份验证标准,如OAuth 2.0,具有不同的授权类型,并且具有依赖于实现的每个组件。因此,几乎每个OAuth 2.0实现我'已经看到需要自定义代码或实现细微的替代方法来实现。更糟糕的是,在某些情况下,您必须邀请Auth's evil cousin “session timeout”对党,这可以迅速升级陷入困境。

作为一种开发者,谁能实现对给定服务的集成,您需要研究和理解这些细微差别,以便弥补您的代码 - 并进行准确的估计。

让'■退回一点并查看主要的身份验证。

谈到验证时,大多数主流云服务(例如Box,Hubspot,Quickbook等)使用:基本,API键,令牌或OAuth之一 - 与所有其他异常均落入Catch-All类别类型的自定义类型(例如,AWS签名)。

  1. 基本验证: 用户名和密码在授权标题中传递。用户's information, : is encoded to a base64 string and transmitted in the request. Thus, to auth as david:p@55w0rd the client would send: Authorization: Basic ZGF2aWQ6cEA1NXcwcmQ=. To ensure security, HTTPS/SSL is required across the entire authentication data cycle as base64 is easily decoded.
  2. API键: An API Key is passed in a request header, a cookie, or a query string (e.g. GET /contacts?api_key=abcd1234). API key based auth uses one or more keys that the client and server have agreed upon. Often they are automatically / randomly generated based on the client'S特定信息(例如IP地址)或可以直接从端点服务提供。如果与HTTPS / SSL加密一起使用,它们仅被认为是安全的
  3. 令牌/持票人: 提供身份验证“bearer”使用密码令牌(字符串)。令牌由服务器提供,客户端将其发送在授权标题中,即。 授权:持票人 。如果使用HTTPS / SSL加密,则再次才能安全。
  4. OAuth 2.0: 由许多现代云的服务使用。它主要用于允许客户端访问受保护的服务器资源,而无需共享用户凭据。 OAuth 2.0框架中有几种不同的授权类型,其中大多数旨在防止密码从服务器传递到服务器。将其视为客户端应用程序将身份验证的责任委托给其他服务,而不是自己管理它们。

    虽然有多种类型的OAuth 2.0授权授权,但并非每个OAuth 2.0实现都将支持所有甚至超过其中一个。例如,Sugar Enterprise使用资源所有者密码凭据(ROPC)授予类型。对于ROPC授权,用户名和密码用于单个请求,并将其直接发送给客户端。然后,客户端将这些凭据发送到授权服务器以便与访问令牌交换。此授予类型可以通过将凭据与长LEVEVED访问令牌或刷新令牌交换凭据来消除客户端来存储资源所有者凭据以备将来使用。

    对于更常见的授权代码授权类型,下面描述OAuth 2.0流。在验证过程可以启动之前,OAuth要求客户端应用程序注册授权服务。它需要诸如姓名,网站和回调URL(仅限HTTPS)的基本信息,该网站仅用于重定向用户一旦允许访问其数据。注册后,端点服务提供了一组凭据:client_id和client_secret。客户秘密必须保密,否则安全性受到损害。


    OAuth 2.0流包括以下步骤:
    1. 客户端应用程序在Endpoint Service上向授权服务器提供请求,该服务将通过向用户显示登录和授权UI页面来响应 - 请求共享权限 具体的 存储在端点服务中的数据资产。
    2. 一旦用户批准,授权授权将被发送回包含授权代码的请求应用程序。
    3. 然后,请求应用程序使用授权授权和授权代码从端点授权服务器请求访问令牌。
    4. 然后,端点服务中的授权服务器提供了一个访问令牌,该访问令牌专门针对请求用户定制 - 设置授予的访问级别(SCOPE)在步骤1中授权。
    5. 接下来,请求应用程序可以使用Access令牌对端点服务进行请求,以检索用户授权的数据资产。

您必须在您的申请中弥补的oauth 2.0细微差别是什么?'S代码?授权服务器如何使用Resource Server共享访问令牌。此外,刷新令牌和访问令牌到期时间是在服务上各不相同的实现细节。

现在我们都是不同类别的API身份验证的专家,您可以在下次在Sprint Planning会议和您的开发人员中同情'添加集成的认证部分的估计大小比预期更大。

有一个更好的方法!糖整合我们'VE建立了我们所有200多个适配器的身份验证。我们'VE标准化为一个或两个RET API调用,具体取决于播放中的身份验证类型。

我们的适配器占对认证的细微差别,无论终端如何's身份验证类型和规格。例如,刷新令牌?会话超时?适配器自动处理。我们'对您进行了努力工作,调整身份验证播放字段。让您的估计更加一致。

我们的适配器不仅减少了您的整合所需的开发工作,他们就可以超出到这一点。事实上,一旦经过身份验证,就需要访问客户所需的一切'S端点数据是糖集成的实例令牌 - 类似于OAuth 2.0流中的访问令牌。例子:

curl -X GET “//api.cloud-elements.com/elements/api-v2/ping” -H “accept: application/json” -H “Authorization: User , Organization , Adapter

如何获得适配器实例令牌?它是使用适配器提供的内置身份验证API资源的结果。

对于通过OAuth认证的端点(例如SFDC How2视频),路径遵循 蓝色的 流程场景如下图所示:

  1. First call is made to GET /elements/{keyOrId}/oauth/url - which passes in the Client ID, Client Secret, and Callback URL (obtained from the registered app - see above).
  2. 用户通过端点提供的UI进行身份验证'S授权服务器。经过身份验证,返回授权代码。
  3. 第二个呼叫是向发布/实例进行的,以创建新的凭据版适配器实例 - 通过授权代码。如果成功,则返回唯一的适配器实例令牌,其与所有后续调用一起使用或将数据发布给用户使用's端点服务,在这种情况下slack.com。访问级别取决于第一步中确定的授权范围。

对于所有其他(非OAuth)端点,路径是 橙子 上图中的流程场景:

  1. 用户根据身份验证类型输入凭据:密钥(s),用户名&密码或令牌。
  2. 呼叫是给Post /实例进行的,以创建一个新的凭据适配器实例。

Want more goodness? More t-shirt size reducing things about the POST /instances API resource call:

  1. 对于OAuth端点,适配器将加密并存储访问和刷新令牌,并在需要时使用刷新令牌自动刷新访问令牌集。因此,你的开发人员们不'T必须建立框架来执行此操作 - 包括管理会话定时器!
  2. 鉴于帖子/实例的JSON身体有效载荷将由端点 - Sugar集成已经有所不同,已经想到了这些细微差别,对它们添加了适配器的必要代码来补偿端点'S不可避免的身份验证细微符号,并映射了JSON有效载荷示例 - 只需从提供的示例中剪切和粘贴。
  3. 检索唯一的实例令牌后,您只需在您的应用程序中将其存储 - 通常在您保留客户的表中's的信息 - 只需存储实例令牌和端点的名称(例如,SFDC)。当您在后续API调用中将其包含时,我们的平台将使用它来确定它与其相关联的终端服务以及其凭据。

不是一个信徒?

没问题,可以举一个例子来看看我说的是什么,“我们为你做了努力”。因此,这是一个尺寸L授权实现并将其减少到A的示例 尺寸S. 使用糖积分:

Authentication Flow

场景1:通过本地  Dropbox API

  1. 使用注册的OAuth信息转到授权页面以在客户端登录's user, i.e. //www.dropbox.com/oauth2/authorize?client_id=MY_CLIENT_ID&redirect_uri=MY_REDIRECT_URI&response_type=code
  2. 通过Auth UI登录应用程序并提示许可以共享存储在端点服务中的特定数据资源。一旦用户批准,授权授权将被发送回包含授权代码的请求应用程序。
  3. The requesting application then uses the authorization grant and authorization code to request an access token from the endpoints authorization server, i.e. POST //www.dropbox.com/oauth2/token?grant_type=authorization_code&code={auth_code}&client_id={client_id}&client_secret={client_secret} The authorization server within the endpoint service then provides an access token and a refresh token that is specifically tailored for the requesting user - setting what level of access is granted (scope) that was authorized by the user in step 2.
    注意:响应中的访问令牌仅在有限的时间内有效。然后,您需要使用刷新令牌进行额外的调用来检索另一对令牌。
  4. 使用Access令牌,您需要拨打登录API来检索会话令牌
  5. 使用会话令牌,您可以向端点服务提出请求以检索用户授权的数据资产。
  6. 经过10分钟,我们遇到了试图对端点服务提出请求以检索数据断言的错误, 403过期会话令牌错误。
  7. 通过步骤4的refresh_Token,我们将刷新呼叫来获取新的访问和刷新令牌以用于接下来的10分钟,即 POST //auth.bullhornstaffing.com/oauth/token?grant_type=refresh_token&refresh_token={refresh_token}&client_id={client_id}&client_secret={client_secret}
  8. 使用新的访问令牌,您需要拨打登录API来检索会话令牌。 (例4)
  9. 使用新的会话令牌,您可以向端点服务提出请求以检索用户授权的数据资产。

注意:每10分钟重复步骤6-9

场景2:通过Sugar集成API

  1. 创建一个实例: 要配置Dropbox适配器实例,请在Sugar集成目录中找到Dropbox适配器。给出一个名称和命中"Create Instance" button.
  2. 您将被重定向到Dropbox API请求授权页面,您可以在其中输入您的Dropbox凭据。根据您的帐户设置,您可以使用2因素身份验证屏幕呈现。 Dropbox会向您发送代码。在“身份验证”页面提示时输入此代码。
  3. Dropbox将下一步要求您批准糖集成请求的权限。
  4. 点击后"Allow"对于Dropbox权限,您将被重定向到Sugar集成,您应该看到您现在具有经过身份验证的Dropbox适配器的实例。

那'嗯!您已成功验证到Dropbox'S API,现在可以开始提出要求。

 匿名的
父母
没有数据
评论
  • $ core_v2_ui.getresizedimagehtml($ compual.user.avatarurl,44,44,44,“%{border ='0px',alt = $ compougin.user.displayname,resizemethod ='zoomandcrop'}”)
    $ core_v2_ui.userpresence($ comminy.user.id) $ compount.user.displayname. 超过2020年前
    此评论正在审核。
孩子们
没有数据