【问题标题】:REST API Authentication (maintaning an authenticated state)REST API 身份验证(维护经过身份验证的状态)
【发布时间】:2013-01-27 16:41:40
【问题描述】:

我正在开发一个 REST API。目前,我正在尝试使其安全性最低。我问这个问题是因为我发现的大多数关于这个主题的帖子都很老了。

对于身份验证,我发现了以下方案:

  • 基本身份验证
  • AWS 身份验证协议
  • OpenID
  • OpenID 连接
  • OAuth 伪身份验证

基本身份验证和 AWS 身份验证会在首次身份验证后维护经过身份验证的请求,因为它们会不断发送签名请求。

我不明白 OpenID 和 OAuth 身份验证如何维护经过身份验证的(第二个)请求?我是否需要在每个请求中使用 OAuth/OpenID 服务器检查访问令牌?这如何防止 REST API 接收已更改的请求?

欢迎您推荐任何其他方案、建议或有关该主题的阅读材料。

【问题讨论】:

    标签: api rest oauth openid oauth-2.0


    【解决方案1】:

    我会在这里讨论 OAuth

    i) 您创建了一个网络应用程序并希望使用 google 的 OAuth API。
    ii) 您注册您的应用程序here 并获得凭据。
    iii) 现在,在应用程序中,您将使用 Google 的 SDK 打开登录页面,输入您的凭据,Google 将对其进行验证并向您发送访问令牌和刷新令牌。
    iv) 您将使用访问令牌对 google 的 API 进行 REST 调用并获取用户的数据。

    现在,回到您提出的问题 -
    access token 一般可以存活 1 小时。是的,您需要在一小时内对 Google 的任何 API 进行的任何经过身份验证的调用都可以使用相同的访问令牌进行。
    还有另一种类型的令牌 - Refresh Token。在任何时候,您的应用程序都可以访问提供者的令牌交换端点并将刷新令牌交换为 - 刷新令牌 + 访问令牌对。

    现在,您有一个可以帮助您一小时的访问令牌和一个可以随时交换的刷新令牌。

    刷新令牌的有效期为您想要的,直到用户明确撤销对您的应用程序的权限。 (告诉谷歌它不想让你访问他的资源!)

    OAuth 可以确保只有经过身份验证和授权的客户端才能访问您的 API,从而确保您的 REST API 安全。但一般来说,OAuth 仅在第三方客户端需要访问用户资源的情况下使用!

    【讨论】:

    • 感谢您的回答。但是拥有令牌并不意味着您已通过身份验证,任何能够重新发送令牌的程序都将被视为正确的客户端。还是我错了?访问令牌不会改变客户端发送的请求/响应可能已被更改的事实。不?如果不签署每个请求,我该如何避免这种情况。
    • 如果服务器发出 Bearer 令牌,那么任何拥有令牌的人都可以访问 API。这是访问令牌寿命短的主要原因之一。您最后一个问题的答案取决于您的应用程序的架构。搜索授权码流,你就会知道如何安全地传递令牌和接收信息。
    猜你喜欢
    • 2019-06-14
    • 2016-10-28
    • 2020-05-16
    • 2011-11-12
    • 1970-01-01
    • 2019-09-25
    • 2018-07-26
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多